aboutsummaryrefslogtreecommitdiff
path: root/command/download.php
diff options
context:
space:
mode:
Diffstat (limited to 'command/download.php')
-rw-r--r--command/download.php196
1 files changed, 196 insertions, 0 deletions
diff --git a/command/download.php b/command/download.php
new file mode 100644
index 0000000..9ec042e
--- /dev/null
+++ b/command/download.php
@@ -0,0 +1,196 @@
+<?php
+
+$conf = $GLOBALS['CONFIG']['DOWNLOAD'];
+
+if(isset($conf['REQUIRE_USER']))
+{
+ if(get_current_user() != $conf['require-user'])
+ {
+ stderr(
+ 'Not downloading files for user %s, run this script as user %s',
+ get_current_user(),
+ $conf['require-user']
+ );
+ exit(2);
+ }
+}
+
+$conferences = Conferences::getConferences();
+
+if(isset($conf['MAX_CONFERENCE_AGE']))
+{
+ $months = intval($conf['MAX_CONFERENCE_AGE']);
+ $conferencesAfter = new DateTime();
+ $conferencesAfter->sub(new DateInterval('P'.$months.'D'));
+
+ stdout('Skipping Conferences before %s', $conferencesAfter->format('Y-m-d'));
+ $conferences = array_filter($conferences, function($conference) use ($conferencesAfter) {
+ if($conference->isOpen())
+ {
+ stdout(
+ ' %s: %s',
+ '---open---',
+ $conference->getSlug()
+ );
+
+ return true;
+ }
+
+ $isBefore = $conference->endsAt() < $conferencesAfter;
+
+ if($isBefore) {
+ stdout(
+ ' %s: %s',
+ $conference->endsAt()->format('Y-m-d'),
+ $conference->getSlug()
+ );
+ }
+
+ return !$isBefore;
+ });
+}
+
+stdout('');
+foreach ($conferences as $conference)
+{
+ stdout('== %s ==', $conference->getSlug());
+
+ $relive = $conference->getRelive();
+ if($relive->isEnabled())
+ {
+ download_for_conference(
+ 'relive-json',
+ $conference,
+ $relive->getJsonUrl(),
+ $relive->getJsonCache()
+ );
+ }
+
+ $schedule = $conference->getSchedule();
+ if($schedule->isEnabled())
+ {
+ download_for_conference(
+ 'schedule-xml',
+ $conference,
+ $schedule->getScheduleUrl(),
+ $schedule->getScheduleCache()
+ );
+ }
+
+ foreach($conference->getExtraFiles() as $filename => $url)
+ {
+ download_for_conference(
+ 'extra-file',
+ $conference,
+ $url,
+ get_file_cache($conference, $filename)
+ );
+ }
+}
+
+stdout('');
+stdout('== eventkalender ==');
+download(
+ 'eventkalender',
+ 'https://c3voc.de/eventkalender/events.json?filter=upcoming&streaming=yes',
+ joinpath([$GLOBALS['BASEDIR'], 'configs/upcoming.json'])
+);
+
+
+
+
+
+function get_file_cache($conference, $filename)
+{
+ return joinpath([$GLOBALS['BASEDIR'], 'configs/conferences', $conference->getSlug(), $filename]);
+}
+
+function download_for_conference($what, $conference, $url, $cache)
+{
+ $info = parse_url($url);
+ if(!isset($info['scheme']) || !isset($info['host']))
+ {
+ stderr(
+ ' !! %s url for conference %s does look like an old-style path: "%s". please update to a full http/https url',
+ $what,
+ $conference->getSlug(),
+ $url
+ );
+ return false;
+ }
+
+ stdout(
+ ' downloading %s from %s to %s',
+ $what,
+ $url,
+ $cache
+ );
+ if(!do_download($url, $cache))
+ {
+ stderr(
+ ' !! download %s for conference %s from %s to %s failed miserably !!',
+ $what,
+ $conference->getSlug(),
+ $url,
+ $cache
+ );
+ }
+ return true;
+}
+
+function download($what, $url, $cache)
+{
+ stdout(
+ ' downloading %s from %s to %s',
+ $what,
+ $url,
+ $cache
+ );
+ $resp = do_download($url, $cache);
+ if($resp !== true)
+ {
+ stderr(
+ ' !! download %s from %s to %s failed miserably: %s !!',
+ $what,
+ $url,
+ $cache,
+ $resp
+ );
+ }
+ return true;
+}
+
+function do_download($url, $cache)
+{
+ $handle = curl_init($url);
+ curl_setopt_array($handle, [
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_SSL_VERIFYPEER => false, /* accept all certificates, even self-signed */
+ CURLOPT_SSL_VERIFYHOST => 2, /* verify hostname is in cert */
+ CURLOPT_CONNECTTIMEOUT => 3, /* connect-timeout in seconds */
+ CURLOPT_TIMEOUT => 5, /* transfer timeout im seconds */
+ CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
+ CURLOPT_USERAGENT => '@c3voc Streaming-Website Downloader-Cronjob, Contact voc AT c3voc DOT de in case of problems. Might the Winkekatze be with you',
+ ]);
+
+ $return = curl_exec($handle);
+ $info = curl_getinfo($handle);
+ curl_close($handle);
+
+ if($info['http_code'] != 200)
+ return 'http-code = '.$info['http_code'];
+
+ $tempfile = tempnam(dirname($cache), 'dl-');
+ if(!$tempfile)
+ return 'could not create tempfile in '.dirname($cache);
+
+ if(false === file_put_contents($tempfile, $return))
+ return 'could write data into tempfile '.$tempfile;
+
+ chmod($tempfile, 0644);
+ rename($tempfile, $cache);
+
+ return true;
+}