about summary refs log tree commit diff stats
path: root/ara.pl
diff options
context:
space:
mode:
authorAndinus <andinus@nand.sh>2020-06-14 03:26:58 +0530
committerAndinus <andinus@nand.sh>2020-06-14 03:26:58 +0530
commite4519b936b779b4534179430c977ebdc627b9e9a (patch)
tree0015e9414fd55eaa07e7fa6cc12fa248f34508ca /ara.pl
parent49b8c0df649362698f8c93718e75b0a2d563dd46 (diff)
downloadara-e4519b936b779b4534179430c977ebdc627b9e9a.tar.gz
Fix file fetching logic, use mtime, switch to HTTP::Simple
The issue with ctime is that it doesn't change & stays the same as
when the file was actually created, this means the code was running
the if block basically everytime after 8 minutes of file creation.

And I couldn't use mtime because HTTP::Tiny's mirror method stores
mtime as 'Last Modified' header.

This switch to HTTP::Simple will download the file everytime which
means the mtime changes & we can make the program not look for file
every time. However this also means that we are downloading the whole
file everytime instead of only when it changes. Meh... It's okay
because the alternative is to write a complicated logic.
Diffstat (limited to 'ara.pl')
-rwxr-xr-xara.pl17
1 files changed, 9 insertions, 8 deletions
diff --git a/ara.pl b/ara.pl
index ab32599..3f59efa 100755
--- a/ara.pl
+++ b/ara.pl
@@ -98,12 +98,12 @@ foreach my $path ( sort keys %unveil ) {
 }
 
 my $file = "$cache_dir/ara.json";
-my $file_ctime;
+my $file_mtime;
 
 # If $file exists then get ctime.
 if ( -e $file ) {
     my $file_stat = path($file)->stat;
-    $file_ctime = Time::Moment->from_epoch( $file_stat->ctime );
+    $file_mtime = Time::Moment->from_epoch( $file_stat->mtime );
 } else {
     warn "File '$file' doesn't exist\nFetching latest...\n"
         if $use_local_file;
@@ -112,22 +112,23 @@ if ( -e $file ) {
 # Fetch latest data only if the local data is older than 8 minutes or
 # if the file doesn't exist.
 if ( not -e $file
-         or $file_ctime < Time::Moment->now_utc->minus_minutes(8)
+         or $file_mtime < Time::Moment->now_utc->minus_minutes(8)
          or $get_latest ) {
-    require HTTP::Tiny;
+    require HTTP::Simple;
+
+    no warnings 'once';
+    $HTTP::Simple::UA->verify_SSL(1);
 
     # Fetch latest data from api.
     my $url = 'https://api.covid19india.org/data.json';
 
-    my $response = HTTP::Tiny
-        ->new( verify_SSL => 1 )
-        ->mirror($url, $file);
+    my $response = HTTP::Simple::getstore($url, $file);
 
     die "Failed to fetch latest data...
 Reason: $response->{reason}\n
 Content: $response->{content}
 Status: $response->{status}\n"
-        unless $response->{success};
+        unless HTTP::Simple::is_success($response);
 }
 
 # Slurp api response to $file_data.