def franchise(self, id):
        link = '/anime/%s/installments' % id
        resp = cache.hummingCache().cacheCheck(Backend().request, 24 * 7, link)
        load = json.loads(resp)

        installment_id = []
        franchise_id = []
        franchise_installments = []

        data = load['data']
        for a in data:
            installment_id.append(a['id'])

        for a in installment_id:
            link = '/installments/%s/franchise' % a
            resp = cache.hummingCache().cacheCheck(Backend().request, 24 * 7,
                                                   link)
            load = json.loads(resp)
            data = load['data']
            franchise_id.append(data['id'])

        for a in franchise_id:
            link = '/franchises/%s/installments' % a
            resp = cache.hummingCache().cacheCheck(Backend().request, 24 * 7,
                                                   link)
            load = json.loads(resp)
            data = load['data']
            for b in data:
                franchise_installments.append('/installments/%s/media' %
                                              b['id'])

        anime = self.getListbyLink(franchise_installments)

        return anime
    def track(self, id, episode, status):
        anilist_id = cache.hummingCache().cacheCheck(Mappings().get, 8760,
                                                     'kitsu', id, 'anilist')

        query = '''
        mutation ($mediaId: Int, $progress : Int, $status: MediaListStatus) {
            SaveMediaListEntry (mediaId: $mediaId, progress: $progress, status: $status) {
                id
                progress
                status
                }
            }
        '''

        variables = {
            'mediaId': int(anilist_id),
            'progress': int(episode),
            'status': status
        }

        resp = requests.post(self.site,
                             headers=self.headers,
                             json={
                                 'query': query,
                                 'variables': variables
                             })
    def getListbyLink(self, list):
        installments = []

        for a in list:
            resp = cache.hummingCache().cacheCheck(Backend().request, 24, a)
            load = json.loads(resp)
            data = load['data']
            installments.append(data)

        extracted_items = self.extract_items(installments)

        return extracted_items
    def getListById(self, list):
        items = []

        for a in list:
            resp = cache.hummingCache().cacheCheck(Backend().request, 24,
                                                   '/anime/%s' % a)
            data = json.loads(resp)
            data = data['data']
            items.append(data)

        extracted_items = self.extract_items(items)

        return extracted_items
    def get_genres(self, id):
        genre_list = []
        resp = cache.hummingCache().cacheCheck(Backend().request,
                                               24 * 7,
                                               '/anime/%s/categories' % id,
                                               limit=217)
        load = json.loads(resp)
        data = load['data']

        for a in data:
            attributes = a['attributes']
            genre_list.append(attributes['title'])

        return genre_list
    def getShow(self, id):
        resp = cache.hummingCache().cacheCheck(Backend().request, 24,
                                               '/anime/%s' % id)
        load = json.loads(resp)
        data = load['data']

        self.remaining_threads.append(data['attributes']['canonicalTitle'])
        self.thread_list.put(self.extract, data)

        while len(self.remaining_threads) > 0:
            time.sleep(1)

        show = self.extractedItems[0]

        return show
 def getKitsu(self, id):
     resp = cache.hummingCache().cacheCheck(Backend().request, 24,
                                            '/anime/%s/mappings' % id)
     load = json.loads(resp)
     data = load['data']
     for a in data:
         attributes = a['attributes']
         if attributes['externalSite'] == 'anidb':
             self.anidb = attributes['externalId']
         if attributes['externalSite'] == 'anilist':
             self.anilist = attributes['externalId']
         if attributes['externalSite'] == 'myanimelist/anime':
             self.mal = attributes['externalId']
         if attributes['externalSite'] == 'trakt':
             self.trakt = attributes['externalId']
    def trending(self):
        anime = []
        resp = cache.hummingCache().cacheCheck(Backend().request, 24,
                                               '/trending/anime')
        load = json.loads(resp)
        data = load['data']

        for a in data:
            self.remaining_threads.append(a['attributes']['canonicalTitle'])
            self.thread_list.put(self.extract, a)

        while len(self.remaining_threads) > 0:
            time.sleep(1)

        sortedItems = tools.sort_anime_by_json(self.extractedItems, data)

        return sortedItems
Ejemplo n.º 9
0
    def getListById(self, list, progress=None):
        items = []

        for a in list:
            resp = cache.hummingCache().cacheCheck(Backend().request, 24,
                                                   '/anime/%s' % a)
            data = json.loads(resp)
            data = data['data']
            items.append(data)

        if progress != None:
            items[0]['account_info'] = progress

        tools.log(items)

        extracted_items = self.extract_items(items)

        return extracted_items
    def all_categories(self):
        categories = []
        resp = cache.hummingCache().cacheCheck(Backend().request,
                                               24 * 7,
                                               '/categories',
                                               limit=217)
        load = json.loads(resp)
        data = load['data']

        for a in data:
            attributes = a['attributes']
            categories.append({
                'name': attributes['title'],
                'description': attributes['description'],
                'slug': attributes['slug'],
                'child_count': attributes['childCount']
            })

        return categories
Ejemplo n.º 11
0
 def track(self, id, episode, status):
     mal_id = cache.hummingCache().cacheCheck(Mappings().get, 8760, 'kitsu', id, 'mal')
     
     result = requests.get(self.site + '/anime/%s' % mal_id, headers=self.headers)
     soup = BeautifulSoup(result.content, 'html.parser')
     csrf = soup.find('meta', {'name':'csrf_token'})['content']
     match = soup.find('h2', {'class':'mt8'})
     if match:
         url = self.site + '/ownlist/anime/edit.json'
     else:
         url = self.site + '/ownlist/anime/add.json'
         
     payload = {
         'anime_id': int(mal_id),
         'status': status,
         'num_watched_episodes': int(episode),
         'csrf_token': csrf
         }
         
     resp = requests.post(url, headers=self.headers, json=payload)
    def all_episodes(self, id):
        resp = cache.hummingCache().cacheCheck(Backend().request,
                                               24,
                                               '/anime/%s/episodes' % id,
                                               page=1)
        load = json.loads(resp)
        count = load['meta']['count']

        pages = int(math.ceil(float(int(count)) / 20))

        for a in range(pages):
            self.remaining_threads.append(a + 1)
            self.thread_list.put(self.episodes, id, a + 1)

        while len(self.remaining_threads) > 0:
            time.sleep(1)

        sortedEps = sorted(self.episodeList,
                           key=lambda x: int(x['episodeNumber']),
                           reverse=False)

        return sortedEps
    def top_upcoming(self, page):
        anime = []

        sort_status = tools.getSetting('upcoming.sort')
        sort = tools.menu_sort[sort_status]

        resp = cache.hummingCache().cacheCheck(
            Backend().request,
            24,
            '/anime?filter[status]=upcoming&sort=%s' % sort,
            page=page)
        load = json.loads(resp)
        data = load['data']

        for a in data:
            self.remaining_threads.append(a['attributes']['canonicalTitle'])
            self.thread_list.put(self.extract, a)

        while len(self.remaining_threads) > 0:
            time.sleep(1)

        sortedItems = tools.sort_anime_by_json(self.extractedItems, data)

        return sortedItems
    def get_franchise(self, id):
        resp = cache.hummingCache().cacheCheck(Backend().request, 24 * 7,
                                               '/anime/%s/installments' % id)
        load = json.loads(resp)
        data = load['data']

        franchise_link = data[0]['relationships']['franchise']['links'][
            'related']
        franchise_link = franchise_link.replace('https://kitsu.io/api/edge',
                                                '')

        resp = cache.hummingCache().cacheCheck(Backend().request, 24 * 7,
                                               franchise_link)
        load = json.loads(resp)
        data = load['data']

        franchise = {}

        attributes = data['attributes']

        try:
            franchise['id'] = data['id']
        except:
            franchise['id'] = None
        franchise['titles'] = {}
        try:
            franchise['titles']['canon'] = attributes['canonicalTitle']
        except:
            franchise['titles']['canon'] = None
        try:
            franchise['titles']['english'] = attributes['titles']['en']
        except:
            franchise['titles']['english'] = None
        try:
            franchise['titles']['romaji'] = attributes['titles']['en_jp']
        except:
            franchise['titles']['romaji'] = None
        franchise['year'] = ''

        #This part is bullshit but its for mappings, takes a few requests LOL
        if franchise['id'] != None:
            resp = cache.hummingCache().cacheCheck(
                Backend().request, 24,
                '/franchises/%s/installments' % franchise['id'])
            load = json.loads(resp)
            data = load['data']

            current_start_year = 1000000

            for a in data:
                link = a['relationships']['media']['links']['related']
                link = link.replace('https://kitsu.io/api/edge', '')

                resp = cache.hummingCache().cacheCheck(Backend().request,
                                                       24 * 7, link)
                load = json.loads(resp)
                media = load['data']

                year = int(media['attributes']['startDate'][:4])

                if year < current_start_year:
                    current_start_year = year

            franchise['year'] = current_start_year

        else:
            franchise['year'] = None

        return franchise
    def search(self,
               title=None,
               year=None,
               rating=None,
               season=None,
               subtype=None,
               genre=None,
               page=1):
        filters = []

        if title != None and title != '':
            filters.append('filter[text]=%s' % title)
        if season == None or season == '':
            if year != None and year != '':
                filters.append(
                    'filter[season]=winter,spring,summer,fall&filter[seasonYear]=%s'
                    % year)
        if season != None and season != '':
            if year == None or year == '':
                filters.append('filter[season]=%s' % season)
            if year != None and year != '':
                filters.append('filter[season]=%s&filter[seasonYear]=%s' %
                               (season, year))
        if rating != None and rating != '':
            filters.append('filter[ageRating]=%s' % rating)
        if subtype != None and subtype != '':
            filters.append('filter[subtype]=%s' % subtype)
        if genre != None and genre != '':
            filters.append('filter[categories]=%s' % genre)

        #for a in filters:
        #if a == 'filter[text]=None':
        #filters.remove(a)

        filter_string = '&'.join(filters)

        sort_status = tools.getSetting('search.sort')
        sort_string = tools.menu_sort[sort_status]

        if title == None or title == '':
            request = '/anime?' + filter_string + '&sort=%s' % sort_string
        else:
            request = '/anime?' + filter_string

        anime = []

        resp = cache.hummingCache().cacheCheck(Backend().request,
                                               24,
                                               request,
                                               page=page)
        load = json.loads(resp)
        data = load['data']

        for a in data:
            self.remaining_threads.append(a['attributes']['canonicalTitle'])
            self.thread_list.put(self.extract, a)

        while len(self.remaining_threads) > 0:
            time.sleep(1)

        sortedItems = tools.sort_anime_by_json(self.extractedItems, data)

        return sortedItems
    def extract(self, item):
        dict = {}
        attributes = item['attributes']

        dict['id'] = item['id']

        dict['titles'] = {}
        try:
            dict['titles']['canon'] = attributes['canonicalTitle']
        except:
            dict['titles']['canon'] = None
        try:
            dict['titles']['english'] = attributes['titles']['en']
        except:
            try:
                dict['titles']['english'] = attributes['titles']['en_us']
            except:
                dict['titles']['english'] = None
        try:
            dict['titles']['romaji'] = attributes['titles']['en_jp']
        except:
            dict['titles']['romaji'] = None
        try:
            dict['titles']['kanji'] = attributes['titles']['ja_jp']
        except:
            dict['titles']['kanji'] = None
        try:
            dict['abbreviated_titles'] = attributes['abbreviatedTitles']
        except:
            dict['abbreviated_titles'] = None

        year = ''

        try:
            year = attributes['startDate'][:4]
        except:
            year = attributes['tba']

        dict['mappings'] = cache.hummingCache().cacheCheck(
            mappings.Mappings().get, 24, dict['id'], attributes['subtype'],
            year)

        try:
            dict['mal_titles'] = cache.hummingCache().cacheCheck(
                Other().getMALTitles, 24, dict['mappings'])
        except:
            dict['mal_titles'] = {}

        try:
            dict['plot'] = attributes['synopsis']
        except:
            sict['plot'] = None
        try:
            dict['year'] = attributes['startDate'][:4]
        except:
            dict['year'] = None
        try:
            dict['start_date'] = attributes['startDate']
        except:
            dict['start_date'] = None
        try:
            dict['end_date'] = attributes['endDate']
        except:
            dict['end_date'] = None
        try:
            dict['popularity_rank'] = attributes['popularityRank']
        except:
            dict['popularity_rank'] = None
        try:
            dict['rating_rank'] = attributes['ratingRank']
        except:
            dict['rating_rank'] = None
        try:
            dict['average_rating'] = attributes['averageRating']
        except:
            dict['average_rating'] = None
        try:
            dict['age_rating'] = attributes['ageRating']
        except:
            dict['age_rating'] = None
        try:
            dict['age_guide'] = attributes['ageRatingGuide']
        except:
            dict['age_guide'] = None
        try:
            dict['subtype'] = attributes['subtype']
        except:
            dict['subtype'] = None
        try:
            dict['status'] = attributes['status']
        except:
            dict['status'] = None
        try:
            dict['episode_count'] = attributes['episodeCount']
        except:
            dict['episode_count'] = None
        try:
            dict['episode_length'] = attributes['episodeLength']
        except:
            dict['episode_length'] = None
        try:
            dict['youtube_trailer'] = attributes['youtubeVideoId']
        except:
            dict['youtube_trailer'] = None
        try:
            dict['nsfw'] = attributes['nsfw']
        except:
            dict['nsfw'] = None

        try:
            dict['genres'] = Other().get_genres(item['id'])
        except:
            dict['genres'] = []

        try:
            dict['franchise_name'] = tools.get_franchise_name(dict['titles'])
        except:
            dict['franchise_name'] = None

        try:
            dict['season'] = tools.get_season_number(dict['titles'])
        except:
            dict['season'] = 1

        qualities = ['original', 'large', 'medium', 'small', 'tiny']

        posterCheck = attributes['posterImage']
        fanartCheck = attributes['coverImage']

        poster = ''
        fanart = ''

        if posterCheck is not None:
            for a in qualities:
                if poster == '':
                    try:
                        poster = posterCheck[a]
                    except:
                        poster = ''
        if fanartCheck is not None:
            for a in qualities:
                if fanart == '':
                    try:
                        fanart = fanartCheck[a]
                    except:
                        fanart = ''

        dict['art'] = {}

        if not tools.getSetting('key.fanart') == '' and tools.getSetting(
                'art.fanart') == 'true':
            from resources.lib.modules import fanarttv

            if dict['subtype'] == 'movie':
                try:
                    dict['art'] = cache.hummingCache().cacheCheck(
                        fanarttv.FanartTV().get, 24, dict['mappings'],
                        dict['subtype'], tools.getSetting('fanart.lang'))
                except:
                    pass
            else:
                try:
                    dict['art'] = cache.hummingCache().cacheCheck(
                        fanarttv.FanartTV().get,
                        24,
                        dict['mappings'],
                        dict['subtype'],
                        tools.getSetting('fanart.lang'),
                        season=dict['season'])
                except:
                    pass

            dict['art']['poster'] = dict['art'].get('poster', poster)
            dict['art']['fanart'] = dict['art'].get('fanart', fanart)
        else:
            try:
                dict['art']['poster'] = poster
            except:
                dict['art']['poster'] = None
            try:
                dict['art']['fanart'] = fanart
            except:
                dict['art']['fanart'] = None

        self.remaining_threads.remove(item['attributes']['canonicalTitle'])
        self.extractedItems.append(dict)
    def episodes(self, id, page):
        resp = cache.hummingCache().cacheCheck(Backend().request,
                                               24,
                                               '/anime/%s/episodes' % id,
                                               page=page)
        load = json.loads(resp)
        data = load['data']

        for a in data:
            attributes = a['attributes']
            episode = {}

            try:
                episode['episode_title'] = attributes['canonicalTitle']
            except:
                episode['episode_title'] = None
            episode['alt_titles'] = {}
            try:
                episode['alt_titles']['romaji'] = attributes['titles']['en_jp']
            except:
                episode['alt_titles']['romaji'] = None
            try:
                episode['alt_titles']['kanji'] = attributes['titles']['ja_jp']
            except:
                episode['alt_titles']['kanji'] = None
            try:
                episode['alt_titles']['english'] = attributes['titles']['en']
            except:
                try:
                    episode['alt_titles']['english'] = attributes['titles'][
                        'en_us']
                except:
                    episode['alt_titles']['english'] = None

            try:
                episode['seasonNumber'] = attributes['seasonNumber']
            except:
                episode['seasonNumber'] = None
            try:
                episode['episodeNumber'] = attributes['number']
            except:
                episode['episodeNumber'] = None
            try:
                episode['relativeNumber'] = attributes['relativeNumber']
            except:
                episode['relativeNumber'] = None
            try:
                episode['episodePlot'] = attributes['synopsis']
            except:
                episode['episodePlot'] = None
            try:
                episode['year'] = attributes['airdate'][:4]
            except:
                episode['year'] = None
            try:
                episode['airdate'] = attributes['airdate']
            except:
                episode['airdate'] = None
            episode['episodeLength'] = attributes['length']
            try:
                episode['thumbnail'] = attributes['thumbnail']['original']
            except:
                episode['thumbnail'] = None

            self.episodeList.append(episode)

        self.remaining_threads.remove(page)
Ejemplo n.º 18
0
 def get_thread(self, site, id, return_site):
     new_id = cache.hummingCache().cacheCheck(self.get, 8760, site, id,
                                              return_site)
     self.id_list.append({site: id, return_site: new_id})
     self.remaining_threads.remove(id)