mirror of
https://github.com/voc/streaming-website
synced 2024-11-15 16:58:01 +00:00
12f16414b7
Some conferences might not have an end date, but might be disabled in their config nonetheless. This leads to a situation which causes a null dereference in the downloader code. Fix this by not downloading data for conferences in such a state, as it stands to reason that we don't care about them anymore if we explicitly disabled them.
201 lines
4.2 KiB
PHP
201 lines
4.2 KiB
PHP
<?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;
|
|
}
|
|
|
|
if($conference->endsAt() == null)
|
|
return false;
|
|
|
|
$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
|
|
);
|
|
$resp = do_download($url, $cache);
|
|
if($resp !== true)
|
|
{
|
|
stderr(
|
|
' !! download %s for conference %s from %s to %s failed miserably: %s !!',
|
|
$what,
|
|
$conference->getSlug(),
|
|
$url,
|
|
$cache,
|
|
$resp
|
|
);
|
|
}
|
|
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;
|
|
}
|