def add_from_imdb(imdb_id, youtube_id):        
        """Retrieves movie data from the inofficial IMDb REST API as well as the IMDB lib imdbpie."""
        file_name = os.path.dirname(__file__) + "/imdb/" + imdb_id + ".json"
        if not os.path.isdir(os.path.dirname(file_name)):
            os.mkdir(os.path.dirname(file_name))

        if os.path.isfile(file_name):
            imdb_saved = open(file_name)
            imdb_save = json.loads(imdb_saved.read())
        else:
            response = urllib.urlopen('http://imdb.wemakesites.net/api/' + imdb_id + '?api_key=' + Movie.__api_key)
            json_response = response.read()
            imdb_data = json.loads(json_response)
            imdb_save = imdb_data['data']

        imdb = Imdb()
        imdb = Imdb(anonymize=True) # to proxy requests
        movie = imdb.get_title_by_id(imdb_id)
        if not movie.title:
            movie.title = raw_input("Movie Title not defined. Please set: ") 

        imdb_save['rating'] = movie.rating
        imdb_save['title'] = movie.title
        
        if youtube_id:
            imdb_save['youtube_id'] = youtube_id
            
        imdb_file = open(file_name, 'w')
        imdb_file.write(json.dumps(imdb_save))
        imdb_file.close()
Пример #2
0
def IMDBSearch(request):
    client = Imdb(locale='en_US')
    imdb = ImdbFacade(client=client)
    imdb2 = Imdb()
    results2 = set([])

    search_term = ''

    if 'search' in request.GET and request.GET['search'] is not '':
        search_term = request.GET['search']

        results = imdb2.search_for_title(search_term)
    else:
        results = Media.objects.none()

    ## Attempting to get the more detailed information, It works, sorta, but it'a really slow.
    # for r in results:
    #     results2.add(r.imdb_id)
    # for r in results2:
    #     print(imdb2.get_title(r)

    table = IMDBSearchTable(results)
    RequestConfig(request).configure(table)

    return render(request, 'pages/IMDBsearch.html',
                  {
                      'search_term': search_term,
                      'table': table,
                  }
                  )
Пример #3
0
def metadata(s):
    imdb = Imdb()
    imdb = Imdb(anonymize=True)  # to proxy requests
    names = imdb.search_for_title(s)
    title = imdb.get_title_by_id(names[0][u'imdb_id'])
    cast = cast_rating(title.cast_summary)
    return title
Пример #4
0
def episodeBuilder(episode_id):

    imdb = Imdb()
    imdb = Imdb(anonymize=True)

    episode = imdb.get_title_by_id(episode_id)

    return episode.plot_outline, episode.title
Пример #5
0
def imdb_rating(movieTitle, year=None):
    imdb = Imdb()
    try:
        results = imdb.search_for_title(movieTitle)
    except:
        print('WARNING: Could not find the title %s' % movieTitle)
        return 0.00
    if year is None:
        bestHit = results[0]
    else:
        gotHit = False
        for result in results:
            movieYear = int(result.get('year'))
            if movieYear - 2 <= year and movieYear + 2 >= year:
                bestHit = result
                gotHit = True
                break
        if not gotHit:
            print('WARNING: Could not get match for %s' % movieTitle)
            return 0.00
    print('-=MATCH=- %s --from %s  --=--  %s' % (movieTitle, year, bestHit))
    idBestHit = bestHit.get('imdb_id')
    rating = imdb.get_title_by_id(idBestHit).rating
    movType = imdb.get_title_by_id(idBestHit).type
    if movType.lower() != 'feature' and movType.lower() != 'documentary':
        print('WARNING: This is not a feature-film or docu: %s' % movieTitle)
        return 0.00
    elif rating is None:
        print('WARNING: Could not get rating from title %s' %
              bestHit.get('title'))
        return 0.00
    return float(rating)
Пример #6
0
    def get(self, request, *arg, **kwargs):

        ia = Imdb()

        #pass int argument between 1-100 to get a list
        #of the top movies right now
        numtop = 50
        top100 = ia.get_popular_movies()
        tosend = []

        index = 0

        for m in top100['ranks']:
            index = index + 1
            if index > int(numtop):
                break
            m_dict = {}
            imdbId =  m['id'][7:16]
            m_dict['imdbId'] = str(imdbId)
            m_dict['title'] = str(m['title'])
            m_dict['posterUrl'] = str(m['image']['url'])
            m_dict['year'] = str(m['year'])
            tosend.append(m_dict)

        try:
            return HttpResponse(json.dumps(tosend))
        except ValueError:
            return HttpResponse("ValueError, int between 1-100 plz", status = 400)
Пример #7
0
def main():
    print("! Getting a list of TV shows from eztv...")
    showlist_page = lxml.html.fromstring(requests.get(EZTV_URL).content)
    shows = [l.text for l in showlist_page.xpath('//a[@class="thread_link"]')]
    print("")
    imdb = Imdb()
    episode_records = []
    for show_name in shows[:10]:
        print("* Processing `{}`...".format(show_name))
        episodes = None
        for show in imdb.search_for_title(show_name):
            try:
                episodes = imdb.get_episodes(show['imdb_id'])
                break
            except (RuntimeError, TypeError):
                # RuntimeError: This is thrown when a show is not recognized a series
                # TypeError: Bug where seasons is None.
                continue
        if episodes is None:
            print("  ! Couldn't find an IMDB entry for `{}`. Ignoring.".format(
                show_name))
            continue
        episode_records += [e.__dict__ for e in episodes]
    df = pd.DataFrame(episode_records)
    df.to_csv(DATA_PATH, index=False)
Пример #8
0
def setup():
    """
    Sets up global wiki object for Wikipedia lookups.
    """
    global wiki, imdb
    wiki = WikiApi()
    imdb = Imdb(anonymize=True)
Пример #9
0
def detail(request, movie_id):
    if not request.user.is_authenticated():
        return render(request, 'movies/base.html')
    else:
        user = request.user
        imdb = Imdb()
        titledetails = imdb.get_title(movie_id)
        dlist = []
        detlist = []
        try:
            dlist.append(titledetails['base']['image']['url'])
        except:
            # insert a null image
            dlist.append(' ')

        detlist.append(titledetails['base']['title'])
        title = titledetails['base']['title']
        detlist.append(titledetails['base']['year'])
        try:
            min = int(titledetails['base']['runningTimeInMinutes'])
            hrs = int(min / 60)
            minutes = min - 60 * hrs
            time = str(hrs) + 'hr ' + str(minutes) + 'min'

            detlist.append(time)
        except:
            detlist.append('-')

        detlist.append(imdb.get_title_genres(movie_id)['genres'])
        try:
            detlist.append(titledetails['plot']['summaries'][0]['text'])
        except:
            detlist.append('-')
        try:
            #print('hello')
            castandcrew = imdb.get_title_credits(movie_id)
            castlist = []
            detdict = {}
            detdict['director'] = castandcrew['credits']['director'][0]['name']
            detdict['producer'] = castandcrew['credits']['producer'][0]['name']
            writers = []
            for i in castandcrew['credits']['writer']:
                writers.append(i['name'])
            writerset = set(writers)
            detdict['writers'] = list(writerset)

            detlist.append(detdict)
            for i in range(0, 6):
                castdict = {}
                castdict[castandcrew['credits']['cast'][i][
                    'name']] = castandcrew['credits']['cast'][i]['characters']
                castlist.append(castdict)
            detlist.append(castlist)
        except:
            detlist.append('-')
        dlist.append(detlist)
        return render(request, 'movies/moviedetails.html', {
            'dlist': dlist,
            'title': title
        })
Пример #10
0
def GetMeta(t, y):
    tmdb.API_KEY = 'b888b64c9155c26ade5659ea4dd60e64'
    search = tmdb.Search()
    search.movie(query=t)
    for s in search.results:
        year = s['release_date'].split('-', 2)
        if year[0] == y:
            d = s
            state = True
            break
        else:
            state = False

    imdb = Imdb()
    results = imdb.search_for_title(t)
    if state is True:
        for i in results:
            if i['type'] == 'feature' and i['year'] == y:
                result = i
                g = imdb.get_title_genres(result['imdb_id'])
                d['genre_ids'] = g['genres']
                break
            else:
                d['genre_ids'] = ''
        return d
    else:
        d = {}
        return d
Пример #11
0
    def test_get_title_by_id_excludes_episodes(self):
        assert self.imdb.get_title_by_id('tt3181538') is not None

        imdb = Imdb(exclude_episodes=True)
        title = imdb.get_title_by_id('tt3181538')

        assert title is None
Пример #12
0
def test(title):
    imdb = Imdb()

    try:
        search = imdb.search_for_title(title)[0]
    except IndexError:
        return 'Movie not found.'

    #results = imdb.search_for_title(title)[:5]
    #for i in range(len(results)):
    #    movie = results[i]
    #    print('{}. {} ({})'.format(i+1, movie['title'], movie['year']))

    #while True:
    #    prompt = raw_input('> ')
    #    if prompt in ['1','2','3','4','5']:
    #        break
    #    else:
    #        print('Invalid choice.')

    #select = results[int(prompt)-1]
    #movie = imdb.get_title_by_id(select['imdb_id'])

    # checking out all dir(movies)
    #for i in dir(movie):
    #    if i.startswith('_'):
    #        continue

#x = getattr(movie, i)
#    print('{} - {}'.format(i, x))

    movie = imdb.get_title_by_id(search['imdb_id'])
    return '{} ({})\n{}\nIMDB: {}'.format(movie.title, movie.year,
                                          movie.plot_outline, movie.rating)
Пример #13
0
 def __init__(self):
     super().__init__()
     try:
         from imdbpie import Imdb
     except ImportError:
         showInfo('Please install the imdbpie module.')
         return
     self.imdb = Imdb()
     self.mainLayout = QGridLayout(self)
     self.queryInput = QLineEdit()
     self.searchResults = QListWidget()
     self.createButton = QPushButton("Create")
     self.createButton.setAutoDefault(False)
     self.sidebar = QWidget()
     self.sidebarLayout = QVBoxLayout(self.sidebar)
     # All valid tokens for imdbpie Person objects.
     self.departments = [
         'director', 'writer', 'cast', 'producer', 'cinematographer',
         'editor', 'casting_director', 'production_designer',
         'art_director', 'set_decorator', 'costume_designer',
         'make_up_department', 'assistant_director', 'art_department',
         'sound_department', 'visual_effects', 'music_department',
         'miscellaneous'
     ]
     self.depBoxes = [QCheckBox(token) for token in self.departments]
     for box in self.depBoxes:
         self.sidebarLayout.addWidget(box)
     self.queryInput.returnPressed.connect(self.search)
     self.createButton.clicked.connect(self.createNotes)
     self.mainLayout.addWidget(self.queryInput, 0, 0, 1, 1)
     self.mainLayout.addWidget(self.searchResults, 1, 0, 1, 1)
     self.mainLayout.addWidget(self.createButton, 2, 0, 1, 1)
     self.mainLayout.addWidget(self.sidebar, 0, 1, 3, 1)
     self.exec_()
Пример #14
0
    def _fetch_metadata(self):
        searchtitle = self._title
        if searchtitle.endswith(", The"):
            searchtitle = "The {}".format(searchtitle[:-5])
        elif searchtitle.endswith(", A"):
            searchtitle = "A {}".format(searchtitle[:-3])

        imdb = Imdb()
        if "id" not in self._md:
            print("  * Searching IMDB")
            results = imdb.search_for_title(searchtitle)
            movie_results = [r for r in results if r["type"] == "feature" and r["year"] is not None]

            while len(movie_results) == 0:
                searchtitle = input("No results for \"%s\" Enter alternate/correct movie title >> " % searchtitle)

                results = imdb.search_for_title(searchtitle)
                movie_results = [r for r in results if r["type"] == "feature" and r["year"] is not None]

            exact_matches = [r for r in movie_results if r["title"].lower() == searchtitle.lower()]

            if len(exact_matches) > 0:
                movie_results = exact_matches

            if len(movie_results) > 1:
                choices=[("%s (%s)" % (r["title"], r["year"]), idx) for idx, r in enumerate(movie_results)]
                choices.append(("Not found", -1))
                answer = inquirer.prompt([
                    inquirer.List("index",
                        message="Multiple results found:",
                        choices=choices
                    )
                ])
                if answer["index"] == -1:
                    self._md["id"] = input("Enter IMDB id: ")
                    movie_results = []
                else:
                    movie_results = [movie_results[answer["index"]]]

            if len(movie_results) > 0:
                mpr = movie_results[0]
                self._md["id"] = mpr["imdb_id"]
                print("  * Fetching data for {} ({})".format(mpr["title"], mpr["year"]))
        else:
            print("  * Fetching data for %s" % self._md["id"])

        imdb_movie = imdb.get_title(self._md["id"])

        self._md["title"] = imdb_movie["base"]["title"]
        self._md["year"] = imdb_movie["base"]["year"]

        if "outline" in imdb_movie["plot"]:
            self._md["plot"] = imdb_movie["plot"]["outline"]["text"]
        else:
            self._md["plot"] = imdb_movie["plot"]["summaries"][0]["text"]

        self._md["genres"] = imdb.get_title_genres(self._md["id"])["genres"]

        self._write_nfo()
Пример #15
0
def download_imdb_reviews(rating_range,
                          directory_path,
                          imdb_id,
                          max_results=1000):
    imdb = Imdb()
    for review in imdb.get_title_reviews(imdb_id, max_results=max_results):
        if review.rating in rating_range:
            download_imdb_review(directory_path, review)
Пример #16
0
 def __init__(self):
     socket.setdefaulttimeout(30)
     self.plex_url = os.environ.get('PLEX_URL')
     self.plex_token = os.environ.get('PLEX_TOKEN')
     self.dir = os.environ.get('POSTER_DIR')
     if not os.path.exists(self.dir):
         os.makedirs(self.dir)
     self.imdb = Imdb()
Пример #17
0
def test_get_title_excludes_episodes(client):
    episode_imdb_id = 'tt3181538'
    assert client.get_title(episode_imdb_id) is not None

    with pytest.raises(LookupError) as exc:
        Imdb(exclude_episodes=True).get_title(episode_imdb_id)

    exc.match(r'Title not found. Title was an episode.+')
Пример #18
0
def seasonBuilder(title):

    # gets the information of the show in general
    # Also gets the seasons and episdoes in a dict to use in the other file

    # iniatilize imdb object
    imdb = Imdb()
    imdb = Imdb(anonymize=True)

    title_json = imdb.search_for_title(title)

    if title_json == []:
        print('No Results Found')
    else:

        # get imdb id to get more information

        title_id = title_json[0]['imdb_id']
        result = imdb.get_title_by_id(title_id)

        show_title = result.title
        year = result.year
        image_url = result.cover_url
        description = result.plot_outline

        temp = imdb.get_episodes(title_id)

        # build season dict to send back to main file
        seasons = {}
        episodes = {}
        season_counter = 1
        for e in temp:

            # new dict entry for the next season, the number season of the show is the entry key
            if e.season > season_counter:

                # the current season is done, time to start building the next episiode dict
                seasons[season_counter] = episodes

                episodes = {}
                season_counter += 1

            episodes[e.episode] = [e.title, e.release_date, e.imdb_id]

        return show_title, year, image_url, description, seasons
Пример #19
0
 def __init__(self, bot: Hifumi):
     """
     Initialize the Utilities class
     :param bot: the bot object
     """
     self.bot = bot
     self.imdb_api = Imdb()
     self.tzs = all_timezones
     self.tzw = TzWhere()
Пример #20
0
def review_extracter(movie):
    """input movie name, outputs txt file with reviews on the front page of imdb"""
    ### extracts content from movie page ###
    imdb = Imdb()
    url = imdb.search_for_title(movie)[0]
    reviews = imdb.get_title_user_reviews(url["imdb_id"])
    ### creates list of all reviews present on the front page###
    imdb = Imdb()
    url = imdb.search_for_title(movie)[0]
    reviews = imdb.get_title_user_reviews(url["imdb_id"])
    ### creates txt file for all reviews present on the front page###
    review_list = []
    for i in range(len(reviews["reviews"])):
        line = reviews["reviews"][i]["reviewText"]
        review_list.append(line)
    ###pickles list###
    with open(f"{movie}_imdb.pickle", "wb") as f:
        pickle.dump(review_list, f)
Пример #21
0
    def post(self, request, *arg, **kwargs ):
        content = request.data
        ia = Imdb()

        try:
            #pass in imdb movie id to get movie details
            data = content['movieId']
            try:
                movie = ia.get_title(data)
                return HttpResponse(json.dumps(movie))
            except ValueError:
                return HttpResponse("Invalid IMDB id", status = 400)
        except KeyError:
            pass




        try:
            #pass int argument between 1-100 to get a list
            #of the top movies right now
            numtop = content['top']
            top100 = ia.get_popular_movies()
            tosend = []

            index = 0

            for m in top100['ranks']:
                index = index + 1
                if index > int(numtop):
                    break
                m_dict = {}
                imdbId =  m['id'][7:16]
                m_dict['imdbId'] = str(imdbId)
                m_dict['title'] = str(m['title'])
                m_dict['posterUrl'] = str(m['image']['url'])
                m_dict['year'] = str(m['year'])
                tosend.append(m_dict)
    
            try:
                return HttpResponse(json.dumps(tosend))
            except ValueError:
                return HttpResponse("ValueError, int between 1-100 plz", status = 400)
        except KeyError:
            pass


        try:
            #pass imdb id to get a list of similar titles
            data = content['similar']
            try:
                similarTitles = ia.get_title_similarities(data)
                return HttpResponse(json.dumps(similarTitles))
            except ValueError:
                return HttpResponse("Invalid IMDB id", status = 400)
        except KeyError:
            return HttpResponse('Request Not Understood.', status = 400)
Пример #22
0
def get_title_id(movie, year):
    ''' Get title_id from imdb API
    '''
    imdb = Imdb(anonymize=True)
    list_of_matches = imdb.search_for_title(movie)
    try:
        possible_match = next(filter(lambda x: x['year'] == year, list_of_matches))
        return possible_match['imdb_id']
    except StopIteration:
        print('No match for movie {}'.format(movie))
Пример #23
0
def getMovieInfo(title):
    imdb = Imdb(anonymize=True)
    movie_id = imdb.search_for_title(title)[0]['imdb_id']
    movie = imdb.get_title_by_id(movie_id)
    movieInfo = [
        'Title: ' + movie.title, 'Rating: ' + str(movie.rating),
        'Runtime: ' + str(int(movie.runtime) / 60),
        'Release Date: ' + movie.release_date,
        'Certification: ' + movie.certification
    ]
    return movieInfo
Пример #24
0
def main():
    imdb = Imdb()
    movie = str(input('Movie Name: '))
    movie_search = '+'.join(movie.split())
    # print(imdb.search_for_name("Christian Bale"))
    movie_dict = imdb.search_for_title(movie_search)
    help_print_movie(movie_dict)
    imdb_id = str(input('IMBD ID: '))
    review_dict = imdb.get_title_user_reviews(imdb_id)
    review_list = review_dict['reviews']
    help_print_review(review_list)
Пример #25
0
    def test_build_url_proxied(self):
        imdb_fr = Imdb(locale='en_FR',
                       cache=False,
                       anonymize=True,
                       proxy_uri='http://someproxywebsite.co.uk?url={0}')
        imdb_fr.timestamp = time.mktime(datetime.date.today().timetuple())

        url = imdb_fr._build_url(path='/title/maindetails',
                                 params={'tconst': 'tt1111111'})

        expected_url = ('http://someproxywebsite.co.uk?url=' +
                        quote('https://app.imdb.com/title/maindetails'))
        assert url.startswith(expected_url) is True
Пример #26
0
 def __init__(self, app_dir, logger):
     self.app_dir_data = app_dir.user_data_dir
     self.cur_cache = {}
     self.cache = {}
     self.cache_file = os.path.join(app_dir.user_data_dir, CACHING_FILE)
     if os.path.exists(self.cache_file):
         with open(self.cache_file) as f:
             self.cache = yaml.load(f)
             if not self.cache:
                 self.cache = {}
     self.in_cache = []
     self.imdb = Imdb()
     self.logger = logger
Пример #27
0
def identify_movies(movies):
    """ identifying the movies from IMDB """
    imdb = Imdb()

    ids = []
    for key, vals in movies.items():
        for val in vals:
            for info in imdb.search_for_title(val):
                if key == info.get('year') and val == info.get(
                        'title').lower():
                    ids.append(info.get('imdb_id'))

    return [imdb.get_title_by_id(id) for id in ids]
Пример #28
0
def AddMovieToDB(imdbId):
    ia = Imdb()
    data = ia.get_title(imdbId)
    title = data['base']['title']
    imageUrl = data['base']['image']['url']
    genres = ia.get_title_genres(imdbId)['genres']
    year = data['base']['year']

    movie = Movie(imdbId = imdbId, year = year, poster = imageUrl, genre = genres, title = title)

    movie.save()

    return
def retrieve_imdb_info(movies_df):
    imdb = Imdb(anonymize=True)

    # movies_df = movies_df.head()

    start = time.time()

    start_row = movies_df.loc[movies_df['imdbId'] == 2267968].iloc[0]
    start_row_index = start_row.name
    indices = movies_df.index[start_row_index + 1:]

    # indices = indices[:2]

    with open('imdb_movies.csv', 'a') as csv_file:
        csv_writer = csv.writer(csv_file, delimiter=',')

        for index in indices:
            row = movies_df.iloc[index]
            imdb_id = row['imdbId']

            imdb_id = imdb_id_conversion_dict.get(imdb_id, imdb_id)

            imdb_id_str = 'tt%07d' % imdb_id

            # print imdb_id, imdb_id_str

            imdb_title = imdb.get_title_by_id(imdb_id_str)

            elapsed_time = int(round(time.time() - start, 0))
            minutes = elapsed_time // 60
            seconds = elapsed_time % 60
            print '%s %d:%02d %s' % (index, minutes, seconds, imdb_title)

            imdb_movie = ImdbMovie(imdb_id,
                                   imdb_title.title,
                                   imdb_title.type,
                                   imdb_title.year,
                                   imdb_title.tagline,
                                   imdb_title.rating,
                                   imdb_title.certification,
                                   imdb_title.genres,
                                   imdb_title.votes,
                                   imdb_title.runtime,
                                   imdb_title.release_date,
                                   convert_person_list(imdb_title.directors_summary),
                                   convert_person_list(imdb_title.creators),
                                   convert_person_list(imdb_title.cast_summary),
                                   convert_person_list(imdb_title.writers_summary),
                                   )

            csv_writer.writerow(imdb_movie)
Пример #30
0
  def __init__(self, **kwargs):
    '''Service task constructor'''
    # Initialising thread parent class
    threading.Thread.__init__(self)

    try:
      # Initialising class variables
      self.component	= self.__class__.__name__
      self.logger	= Utilities.GetLogger(self.component)

      # Thread action variables
      self.tStop 	= threading.Event()
      self.threads	= []
      self.tid		= None
      self.running	= False

      ## Adding local variables
      self.service	= None
      self.onStart	= True
      self.not_searching= False
      self.search_title = None

      self.logger.debug("  + Creating IMDB client")
      self.imdb         = Imdb()

      self.logger.debug("  + Creating similarity calculator")
      self.similarity   = Similarity()

      # Generating instance of strategy
      for key, value in kwargs.iteritems():
	if "service" == key:
	  self.service = value
	elif "onStart" == key:
	  self.onStart = bool(value)
        elif "search_title" == key:
          self.search_title = value

      ## Setting item started for reporting to device action
      self.running	= True
	
      # Starting action thread
      if self.onStart:
	self.logger.debug("  + Process is starting immediately")
	self.start()

      ## Adding monitor thread to the list of references
      self.threads.append(self)
    except Exception as inst:
      Utilities.ParseException(inst, logger=self.logger)