Changeset 1530


Ignore:
Timestamp:
03/03/17 16:49:23 (8 months ago)
Author:
mbarry
Message:

rex patch from Mark

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/grabbers/rex

    r1524 r1530  
    33# "Rex" 
    44 
    5 my $version  = '10.0.0';  
     5my $version  = '10.1.0a';  
    66 
    77# An Australian TV Guide Grabber (a.k.a. tv_grab_au) 
     
    1616# A current version of this script, plus a README file, might be here: 
    1717# http://www.whuffy.com/tv_grab_au/ 
     18#  
     19# 10.1.0 - updated 17th Feb 2017 - interim fixes to parsing and URL changes 
    1820 
    1921use strict; 
     
    2123use Getopt::Long; 
    2224use Date::Manip; 
     25use Date::Parse; 
    2326use File::Path; 
    2427use File::Basename; 
     
    4043my $lang = "en"; 
    4144 
    42 my $DATASOURCE             = "http://www.yourtv.com.au"; 
    43 my $DATASOURCE_GUIDE       = "$DATASOURCE/getGuide"; 
    44 my $DATASOURCE_DETAIL      = "$DATASOURCE/getProgramInfo"; 
     45my $DATASOURCE              = "https://www.yourtv.com.au"; 
     46my $DATASOURCE_GUIDE        = "$DATASOURCE/api/guide/"; 
     47my $DATASOURCE_DETAIL       = "$DATASOURCE/api/airings/"; 
     48 
    4549 
    4650my $runtime = time(); 
     
    160164  { 
    161165    $date = Ymd(DateCalc("now", "+ $day days")); 
     166 
    162167    $dow = substr(localtime($runtime + (86400 * $day)).'', 0, 3); 
    163168    print "Day $day ($dow).\n" if ($debug); 
    164  
    165     $url = sprintf "%s?date=%s&ftaRegion=%d&format=json", $DATASOURCE_GUIDE, Ymd($date), $opt->{region}; 
     169    print "Date $date ($dow).\n" if ($debug); 
     170 
     171    $url = sprintf "%s?day=%s&format=json&region=%d", $DATASOURCE_GUIDE, lc($dow), $opt->{region}; 
    166172    $guidedata = get_page($url); 
    167173    parse_guide($guidedata, $date) if ($guidedata); 
     
    281287 
    282288    print "Downloading # $pid (" . $precache->{$pid}->{title} . ").\n" if ($debug); 
    283     my $url = sprintf "%s?eventId=%d&regionId=%d", $DATASOURCE_DETAIL, $pid, $opt->{region}; 
     289    my $url = sprintf "%s%d", $DATASOURCE_DETAIL, $pid; 
    284290    my $detailsdata = get_page($url); 
    285291    $result = parse_details($detailsdata, $pid) if ($detailsdata); 
     
    484490    my $data = JSON::decode_json($guidedata); 
    485491 
    486     my $rows = $data->{sections}->{fta}->{rows}; 
     492    my $rows = $data->[0]{channels}; 
    487493 
    488494    my @channels_seen; 
     
    490496    foreach my $row (@$rows) 
    491497    { 
    492         my $channame = $row->{channelName}; 
     498   my $channame = $row->{name}; 
    493499        my $curchan = translate_channel_name($channame, scalar(grep($_ eq $channame, @channels_seen))); 
    494500        push @channels_seen, $channame; 
     
    502508        foreach my $block (@{$row->{blocks}}) 
    503509        { 
     510       my $duration = $block->{offsets}; 
     511 
     512       # if the text margin-left appears in the duration going to assume that the program 
     513       # was included in the previous days results and will ignore it here 
     514       if ($duration =~ /margin-left/) { 
     515       next; 
     516       } 
     517 
     518       # no endtime or duration in the json guide data 12th Feb 2017 
     519       # so attempt to spoof a valid duration from available info 
     520            $duration =~ s#[%].*##g; 
     521            $duration =~ s#.*[ ]##g; 
     522       $duration = $duration * 100000; 
     523       $duration = $duration / 6944; 
     524            $duration =~ s#[.].*##g; 
     525       $duration = $duration * 60; 
     526 
    504527            foreach my $show (@{$block->{shows}}) 
    505528            { 
    506                 addme($show, $curchan); 
     529#      addme($show, $curchan); 
     530                addme($show, $curchan, $duration, $date); 
     531 
    507532            } 
    508533        } 
     
    512537sub addme 
    513538{ 
    514     my ($show, $curchan) = @_; 
     539    my ($show, $curchan, $duration, $date) = @_; 
    515540 
    516541    my $pid = $show->{id}; 
    517542 
    518     $precache->{$pid} = {  
     543    my $text_start_time = $show->{date}; 
     544    $text_start_time = $date . " " . $text_start_time; 
     545    my $real_start_time = str2time($text_start_time); 
     546    my $real_end_time = $real_start_time + $duration; 
     547    $real_start_time = strftime '%Y%m%d%H%M%S', localtime $real_start_time; 
     548    $real_end_time = strftime '%Y%m%d%H%M%S', localtime $real_end_time; 
     549 
     550    $precache->{$pid} = { 
    519551        'title' => $show->{title}, 
    520         'start' => convert_date($show->{startTime}), 
    521         'stop' => convert_date($show->{endTime}), 
    522         'program_id' => $show->{programId}, 
     552   'start' => $real_start_time, 
     553   'stop' => $real_end_time, 
     554#        'debug_rex_id1' => $show->{id}, 
     555#        'debug_rex_id2' => $show->{programId}, 
    523556        'channel' => $channels->{$curchan}, 
    524557    }; 
     
    553586    my $data = JSON::decode_json($detailsdata); 
    554587 
    555 #    print Dumper($data) if ($debug); 
     588    print Dumper($data) if ($debug); 
    556589 
    557590    my $show = $precache->{$pid}; 
     
    559592    my %video; 
    560593 
    561     my $lang = $data->{meta}->{info}->{language} || 'en'; 
    562  
    563     $show->{title} = [[ $data->{copy}->{h1}, $lang ]]; 
     594    my $lang = $data->{language} || 'en'; 
     595 
     596    $show->{title} = [[ $data->{program}->{title}, $lang ]]; 
    564597 
    565598    $show->{language} = [ $lang ]; 
    566599 
    567     $show->{desc} = [[ $data->{copy}->{description}, $lang ]]; 
    568  
    569     if ($data->{meta}->{info}->{rating}) 
    570     { 
    571         $show->{rating} = [[ uc $data->{meta}->{info}->{rating}, 'ABA', undef]]; 
    572     } 
    573  
    574     if (is_true($data->{meta}->{info}->{repeat})) 
     600    $show->{desc} = [[ $data->{synopsis}, $lang ]] || [[ $data->{program}->{longSynopsis}, $lang ]] || [[ $data->{program}->{mediumSynopsis}, $lang ]] || [[ $data->{program}->{shortSynopsis}, $lang ]] || [[ $data->{synopsis}, $lang ]]; 
     601 
     602    if (!($show->{desc}[0][0])) 
     603    { 
     604        $show->{desc} = [[ $data->{synopsis}, $lang ]]; 
     605    } 
     606    if (!($show->{desc}[0][0])) 
     607    { 
     608        $show->{desc} = [[ $data->{program}->{longSynopsis}, $lang ]]; 
     609    } 
     610    if (!($show->{desc}[0][0])) 
     611    { 
     612        $show->{desc} = [[ $data->{program}->{mediumSynopsis}, $lang ]]; 
     613    } 
     614    if (!($show->{desc}[0][0])) 
     615    { 
     616        $show->{desc} = [[ $data->{program}->{shortSynopsis}, $lang ]]; 
     617    } 
     618    if (!($show->{desc}[0][0])) 
     619    { 
     620   $show->{desc} = [[ $data->{program}->{title}, $lang ]]; 
     621    } 
     622    if (!($show->{desc}[0][0])) 
     623    { 
     624        $show->{desc} = [[ "Failed to parse a valid description, shouldn't be possible", $lang ]]; 
     625    } 
     626 
     627    if ($data->{classification}) 
     628    { 
     629   $show->{rating} = [[ uc $data->{classification}, 'ABA', undef]]; 
     630    } 
     631 
     632    if ($data->{repeat}) 
    575633    { 
    576634        $show->{'previously-shown'} = { }; 
    577635    } 
    578     if (is_true($data->{meta}->{info}->{premiere})) 
     636    if ($data->{premiere}) 
    579637    { 
    580638        $show->{'premiere'} = [ 'Premiere' ]; 
    581639        $type{'premiere'} = 1; 
    582640    } 
    583     if ($data->{copy}->{h2}) 
    584     { 
    585         $show->{'sub-title'} = [[ $data->{copy}->{h2}, $lang ]]; 
    586     } 
    587  
    588     if ($data->{meta}->{info}->{mainCast}) 
    589     { 
    590         $show->{'credits'}{'actor'} = [ split(/, ?/, strip_whitespace($data->{meta}->{info}->{mainCast})) ]; 
    591     } 
    592  
    593     if (is_true($data->{tech}->{widescreen})) 
     641    if ($data->{episodeTitle}) 
     642    { 
     643        $show->{'sub-title'} = [[ $data->{episodeTitle}, $lang ]]; 
     644    } 
     645 
     646    if (is_true($data->{mainCast})) 
     647    { 
     648   $show->{'credits'}{'actor'} = [ split(/, ?/, strip_whitespace($data->{mainCast})) ]; 
     649    } 
     650 
     651    if ($data->{widescreen}) 
    594652    { 
    595653        $video{'aspect'} = '16:9'; 
    596654    } 
    597655 
    598     if (is_true($data->{tech}->{highDefinition})) 
     656    if ($data->{highDefinition}) 
    599657    { 
    600658        $video{'quality'} = 'HDTV'; 
    601659    } 
    602660 
    603     if (is_true($data->{meta}->{info}->{live})) 
    604     { 
    605         $type{live} = 1; 
    606     } 
    607  
    608     if (is_true($data->{tech}->{captions}) or is_true($data->{tech}->{subtitles})) 
     661#    if (is_true($data->{realtime})) 
     662#    { 
     663$type{live} = 1; 
     664#    } 
     665 
     666    if (is_true($data->{closedCaptions}) or is_true($data->{subtitles})) 
    609667    { 
    610668        $show->{'subtitles'} = [ { 'type' => 'teletext' } ]; 
    611669    } 
    612670 
    613     $show->{language} = [ $data->{meta}->{info}->{language} || 'en' ]; 
    614  
    615     if ($data->{meta}->{info}->{country}) 
    616     { 
    617         $show->{country} = [[ $data->{meta}->{info}->{country}, 'en' ]]; 
     671#    $show->{language} = [ $data->{meta}->{info}->{language} || 'en' ]; 
     672 
     673    if ($data->{country}) 
     674    { 
     675   $show->{country} = [[ $data->{country}, 'en' ]]; 
    618676    } 
    619677 
     
    622680    $show->{'category'} = [ &Shepherd::Common::generate_category($show->{'title'}[0][0], undef, %type) ]; 
    623681 
    624     print Dumper($show) if ($debug); 
     682#    print Dumper($show) if ($debug); 
    625683    return $show; 
    626684} 
     
    823881} 
    824882 
    825 sub convert_date 
    826 { 
    827     my $str = shift; 
    828  
    829     my $ret = ParseDate($str); 
    830     $ret =~ tr/://d; 
    831  
    832     return $ret; 
    833 } 
    834  
    835883sub expand_date 
    836884{ 
  • trunk/status

    r1529 r1530  
    88grabber         yahoo7widget        2.44 
    99grabber         sbsweb              5.04 
    10 grabber         rex                 10.0.0 
     10grabber         rex                 10.1.0a 
    1111grabber         acctv_website       0.09 
    1212grabber         zaxmltv             0.03 
Note: See TracChangeset for help on using the changeset viewer.