Ejemplo n.º 1
0
def fetch_from_crunchyroll():
    data = sources.crunchyroll.list_latest_episodes(100)
    episodes = data.get('episodes', [])
    series = data.get('series', [])

    source_type = sources.CRUNCHYROLL_SOURCE

    network = models.Network.objects(source_type=source_type).first()
    if network is None:
        network = models.Network()
        network._type = 'Subscription'
        network.name = 'Crunchyroll'
        network.description = 'Official, legal streaming anime videos including Naruto Shippuden, ' + \
            'Attack on Titan, Sword Art Online, Skip Beat, and Shugo Chara. Start watching now.'
        network.country = 'US'
        network.source_type = source_type
        network.save()

    for series_data in series:
        extra_data = series_data.get('extra_data', {})
        _id = extra_data.get('series_id')
        query = models.Series.objects(source_id=_id, source_type=source_type)
        if query.first() is not None:
            continue

        series = models.Series()

        series.name = series_data['name']
        series.description = series_data['description'] or ''
        series.genres = series_data['genres']
        series.image = series_data['image'] or ''

        if series_data['runtime']:
            series.runtime = series_data['runtime']

        series.network = network

        series.source_id = _id
        series.source_type = source_type
        series.extra_data = extra_data

        series.save()

        network.update(add_to_set__series=[series])
        network.save()

    for episode_data in episodes:
        extra_data = episode_data.get('extra_data', {})
        series_id = extra_data.get('series_id')

        _id = extra_data.get('media_id')
        media_objects = models.Media.objects(source_id=_id)
        filtered_media_objects = filter(lambda m: m.source_type == source_type, media_objects)
        if len(filtered_media_objects) > 0:
            continue

        media = models.Media()

        media.name = episode_data['name']
        media.summary = episode_data['summary']
        media.image = episode_data['image'] or ''
        media.season = episode_data['season'] or 1
        media.number = episode_data['number']
        media.timestamp = utils.iso_to_timestamp(episode_data['timestamp'])

        if episode_data['runtime'] is not None:
            media._runtime = episode_data['runtime']

        series = models.Series.objects(source_type=source_type, source_id=series_id).first()
        media.series = series

        media.source_id = _id
        media.extra_data = extra_data

        media.save()

        series.update(add_to_set__media=[media])
        series.save()
Ejemplo n.º 2
0
def parse_television_data(data):
    source_type = sources.TELEVISION_SOURCE

    shows = data.get('shows', [])
    networks = data.get('networks', [])
    episodes = data.get('episodes', [])

    for network_data in networks:
        _id = network_data.get('extra_data', {}).get('id')
        query = models.Network.objects(source_id=_id, source_type=source_type)
        if query.first() is not None:
            continue

        network = models.Network()

        network._type = 'None'
        network.name = network_data['name']
        network.description = network_data.get('description', '')

        network.timezone = network_data['timezone']
        network.country = network_data['country_code']

        network.source_id = _id
        network.source_type = source_type

        network.save()

    for show_data in shows:
        extra_data = show_data.get('extra_data', {})
        _id = extra_data.get('id')
        network_id = extra_data.get('network_id')
        query = models.Series.objects(source_id=_id, source_type=source_type)
        if query.first() is not None:
            continue

        series = models.Series()

        series.name = show_data['name'] or ''
        series.description = show_data['description']
        series.genres = show_data['genres']
        series.image = show_data.get('image', '')
        series.runtime = show_data['runtime']

        network_query = models.Network.objects(source_id=network_id, source_type=source_type)
        network = network_query.first()
        series.network = network

        series.source_id = _id
        series.source_type = source_type

        series.extra_data = extra_data

        series.save()

        network.update(add_to_set__series=[series])
        network.save()

    for episode_data in episodes:
        extra_data = episode_data.get('extra_data', {})
        series_id = extra_data['series_id']
        network_id = extra_data['network_id']

        episode_number = episode_data['number']
        if episode_number is None:
            continue

        network = models.Network.objects(source_id=network_id, source_type=source_type).first()
        series = models.Series.objects(source_id=series_id, source_type=source_type).first()
        exists = False

        media = filter(lambda m: m.number == episode_number, series.media)
        if len(media) > 0:
            continue

        media = models.Media()

        media.name = episode_data['name'] or ''
        media.summary = episode_data['summary']
        media.image = episode_data['image'] or ''
        media.season = episode_data['season'] or 1
        media.number = episode_number
        media.timestamp = utils.iso_to_timestamp(episode_data['timestamp'])

        if episode_data['runtime'] is not None:
            media._runtime = int(episode_data['runtime'])

        media.series = series
        media.extra_data = extra_data

        media.save()

        series.update(add_to_set__media=[media])
        series.save()