Example #1
0
 def __init__(self, bot):
     self.bot = bot
     config = Config.get_config()
     try:
         self.omdb = OMDBClient(apikey=config.get("omdbKey", None))
     except Exception as ex:
         self.bot.unload_extension("cogs.utils.movie")
 def _get_omdb_data(self):
     for rec in self:
         # Get OMDB Data
         try:
             from omdb import OMDBClient
             client = OMDBClient(apikey=rec.api_key.name)
             items = []
             if client:
                 for i in range(1, rec.pages + 1):
                     page_items = client.get(
                         media_type=rec.type_id.name,
                         search=rec.name,
                         year=rec.year if rec.year else None,
                         season=rec.season if rec.season else None,
                         episode=rec.episode if rec.episode else None,
                         fullplot=rec.fullplot,
                         tomatoes=rec.tomatoes,
                         timeout=rec.timeout,
                         page=i)
                     if page_items:
                         items += page_items
             return items
         except:
             raise UserError(
                 "There are Issue When Connect With OMDB Api and Get Data.")
Example #3
0
 def call_omdb(tag):
     client = OMDBClient(apikey=OMDB_KEY)
     response = client.title(tag, media_type='movie')
     try:
         return response['title'], response
     except KeyError:
         raise NotFound(f"no movie matching \"{tag}\" found")
Example #4
0
def get_data(title="Game of Thrones"):
    client = OMDBClient(apikey="cc71ac81")
    client.set_default("tomatoes", True)

    xml_content = client.get(title=title)

    response = requests.get(xml_content["poster"])
    img = Image.open(BytesIO(response.content))
    img.save("static/{}.png".format(title.lower()), format="png")

    return xml_content
Example #5
0
    def emoji_ratings(self) -> Dict[str, str]:
        global omdb
        if omdb is None:
            omdb = OMDBClient(apikey=settings.OMDB_API_KEY)
        id, title = self.id, None if self.id else self.title

        movie = omdb.get(imdbid=id, title=title)
        if movie:
            ratings = movie.get("ratings")
            e_ratings = reduce(emojify_sources, ratings, {})

            return e_ratings
Example #6
0
    def get_api_data(self, movie_id):
        """
        Get API data for movie
        :param movie_id: imdb id
        """
        client = OMDBClient(apikey=self.api_key)
        movie_info = client.get(imdbid=movie_id)

        # Download and store poster
        movie_poster_url = movie_info['poster']
        urllib.urlretrieve(movie_poster_url,
                           "pepper_html/imdb/images/movie_poster.jpg")
        self.movie_data = movie_info
Example #7
0
def generate_poster_url_dict(imdb_ids):
    """
    :param imdb_ids: list of movie ids
    :return: list of urls to corresponding posters.
    """
    client = OMDBClient(apikey=os.environ.get('OMDB_API_KEY'))
    poster_url_list = []
    for imdb_id in imdb_ids:
        data = client.get(imdbid=imdb_id)
        poster_url = data['poster']
        print(poster_url)
        poster_url_list.append(poster_url)

    return poster_url_list
Example #8
0
def search_movie():
    ''' Searches for a movie to add to the list '''
    form = SearchForMovie()

    if form.validate_on_submit():
        results = []
        client = OMDBClient(apikey=Omdb.OMDB_KEY)
        search = client.search_movie(form.search.data)
        for s in search:
            title = s['title']
            year = s['year']
            movie = client.get(title=title, year=year, fullplot=False)
            results.append(movie)
        return render_template('search.html', results=results, form=form)

    return render_template('search.html', form=form)
Example #9
0
def init_client(key=_OMDB_KEY):
    """
    Call this once at the beginning
    :param key: API key for OMDB
    :return: None
    """
    global OMDB_CLI
    OMDB_CLI = OMDBClient(apikey=key)
Example #10
0
def init_project(static_folder, *args):
    runtime_folder = get_runtime_folder()
    if not os.path.exists(runtime_folder):
        os.mkdir(runtime_folder)

    runtime_stream_folder = get_runtime_stream_folder()
    if not os.path.exists(runtime_stream_folder):
        os.mkdir(runtime_stream_folder)

    epg_tmp_folder = get_epg_tmp_folder()
    if not os.path.exists(epg_tmp_folder):
        os.mkdir(epg_tmp_folder)

    _app = Flask(__name__, static_folder=static_folder)
    for file in args:
        _app.config.from_pyfile(file, silent=False)

    _app.wsgi_app = ProxyFix(_app.wsgi_app)
    Bootstrap(_app)
    _db = PyModm(_app)
    _mail = Mail(_app)
    _socketio = SocketIO(_app, async_mode='gevent')
    _login_manager = LoginManager(_app)

    _login_manager.login_view = 'HomeView:signin'

    # socketio
    @_socketio.on('connect')
    def connect():
        pass

    @_socketio.on('disconnect')
    def disconnect():
        pass

    # defaults flask
    _host = '0.0.0.0'
    _port = 8080
    server_name = _app.config.get('SERVER_NAME_FOR_POST')
    sn_host, sn_port = None, None

    if server_name:
        sn_host, _, sn_port = server_name.partition(':')

    host = sn_host or _host
    port = int(sn_port or _port)
    _servers_manager = ServiceManager(host, port, _socketio)

    omdb_api_key = _app.config.get('OMDB_KEY')
    _omdb = OMDBClient(apikey=omdb_api_key)

    return _app, _mail, _login_manager, _servers_manager, _omdb, _db
Example #11
0
def init_project(static_folder, *args):
    runtime_folder = get_runtime_folder()
    if not os.path.exists(runtime_folder):
        os.mkdir(runtime_folder)

    runtime_stream_folder = get_runtime_stream_folder()
    if not os.path.exists(runtime_stream_folder):
        os.mkdir(runtime_stream_folder)

    epg_tmp_folder = get_epg_tmp_folder()
    if not os.path.exists(epg_tmp_folder):
        os.mkdir(epg_tmp_folder)

    app = Flask(__name__, static_folder=static_folder)
    for file in args:
        app.config.from_pyfile(file, silent=False)

    app.wsgi_app = ProxyFix(app.wsgi_app)
    bootstrap = Bootstrap(app)
    db = MongoEngine(app)
    mail = Mail(app)
    socketio = SocketIO(app)
    login_manager = LoginManager(app)

    login_manager.login_view = 'HomeView:signin'

    # socketio
    @socketio.on('connect')
    def connect():
        pass

    @socketio.on('disconnect')
    def disconnect():
        pass

    # defaults flask
    _host = '0.0.0.0'
    _port = 8080
    server_name = app.config.get('SERVER_NAME_FOR_POST')
    sn_host, sn_port = None, None

    if server_name:
        sn_host, _, sn_port = server_name.partition(':')

    host = sn_host or _host
    port = int(sn_port or _port)
    servers_manager = ServiceManager(host, port, socketio)

    omdb_api_key = app.config.get('OMDB_KEY')
    omdb = OMDBClient(apikey=omdb_api_key)

    return app, bootstrap, db, mail, login_manager, servers_manager, omdb
Example #12
0
def membersearchmovie(request, type_id, user_id):
    movietitle = request.GET.get('movietitle')
    if not movietitle:
        return render(request, 'error/error.html')
    movie = models.movie.objects.filter(title=movietitle)
    if not movie:
        API_KEY = '66a8c2f3'
        client = OMDBClient(apikey=API_KEY)
        movie_data = client.get(movietitle)
        allmovie = []
        for movie in movie_data:
            new_movie = Imdb_Movie(title=movie['title'],
                                   poster=movie['poster'],
                                   watchlink="https://www.imdb.com/title/" +
                                   movie['imdb_id'])
            allmovie.append(new_movie)
        cd = {'allmovie': allmovie}
        return render(request, 'error/error2.html', cd)
    else:
        moviefound = models.movie.objects.get(title=movietitle)
        return HttpResponseRedirect('/movie/' + str(moviefound.id) + '/type/' +
                                    str(type_id) + '/id/' + str(user_id) + '/')
def media_database_builder(file, API_KEY, start_index, stop_index):
    """
    This function used requests imdb movies and tv information using the omdb
    module and appends them to a dataframe

    INPUTS:
        file = file containing imdb keys
        API Key
        Start index and Stop index for imdb keys

    OUTPUTS:
        Excel csv spreadsheet containing information

    """
    # convert unique imdb title to dataframe
    col_name = ['imdbid']
    imdb_id = pd.read_csv(file, sep='\t', names=col_name)

    omdb.set_default('apikey', API_KEY)
    client = OMDBClient(apikey=API_KEY)

    rows_list = []
    for i in range(int(start_index), int(stop_index)):
        print(i)
        movie_ID = imdb_id.iloc[i, 0]
        try:
            movie_dict = omdb.get(imdbid=movie_ID)
            rows_list.append(movie_dict)
            # Generates HTTP Error
            r = omdb.request(imdbid=movie_ID)
        # Value error - imdb ID yeilds dictionary that is empty
        # HTTPError (522) - Exceeded requests per unit time
        # Timeout - Overrules default timeout value
        except (ValueError, requests.HTTPError, requests.ReadTimeout) as err:
            if err == ValueError:
                continue
            else:
                i = i - 1
                time.sleep(2.0)
                print('Error has occured')
                print('Retry request in 2.0 seconds')
                continue

    media_df = pd.DataFrame(rows_list)
    media_csv = media_df.to_csv(r'media_data.csv',
                                mode='a',
                                header=False,
                                index=None,
                                encoding="utf-8")

    return media_csv
Example #14
0
def get_ratings(title="Game of Thrones"):

    try:
        # check if we already have the ratings of the listing
        data = np.load("data/{}.npy".format(title.lower()))
        print("Loaded data from disk")
        return data, title
    except:
        client = OMDBClient(apikey="cc71ac81")
        client.set_default("tomatoes", True)
        # ratings for season 1
        xml_content = client.get(title=title, season=1)
        num_episodes = len(xml_content["episodes"])

        # total number of seasons
        total_seasons = int(xml_content["total_seasons"])
        print("Total seasons: {}".format(total_seasons))

        list = []
        listoflists = []

        for item in xml_content["episodes"]:
            list.append(item["imdb_rating"])
        listoflists.append(list)
        print(listoflists)

        # get the ratings of other seasons
        for i in range(2, total_seasons + 1):
            list = []
            xml_content = client.get(title=title, season=i)
            for item in xml_content["episodes"]:
                list.append(item["imdb_rating"])
            listoflists.append(list)

        print(listoflists)
        maxlen = 0
        for item in listoflists:
            if len(item) > maxlen:
                maxlen = len(item)

        for item in listoflists:
            while len(item) < maxlen:
                item.append(None)

        data = np.array(listoflists).transpose()
        np.place(data, data == "N/A", None)
        print(data)
        data = data.astype(np.float)
        print("Loaded data from omdb")
        np.save("data/{}".format(title.lower()), data)
        return data, title
def omdb_data(arguments):
    movie_name, year = arguments
    client = OMDBClient(apikey=OMDB_API_KEY)
    try:
        result = client.get(title=movie_name, year=year, fullplot=True, tomatoes=True)
    except HTTPError as e:
        print(e)

        client.set_default("apikey", OMDB_API_KEY_fallback)

        result = client.get(title=movie_name, year=year, fullplot=True, tomatoes=True)

    result_to_keep = {}

    for key in requested_flat_fields:
        result_to_keep[key] = result.get(key, None)

    for nested_field in requested_nested_fields:
        requested_nested_list = requested_nested_fields[nested_field]
        nested_list = result.get(nested_field, None)

        if nested_list:
            for nested_dict in nested_list:
                source = nested_dict.get("source", None)

                if source:
                    value = nested_dict.get("value", None)

                    if source in requested_nested_list:

                        source_formatted = to_snake_case(source)
                        key = f"{nested_field}_{source_formatted}"

                        result_to_keep[key] = value

            requested_sources = requested_nested_fields[nested_field]
            for requested_source in requested_sources:
                source_formatted = to_snake_case(requested_source)
                key = f"{nested_field}_{source_formatted}"
                if not key in result_to_keep:
                    result_to_keep[key] = None

        else:
            requested_sources = requested_nested_fields[nested_field]
            for requested_source in requested_sources:
                source_formatted = to_snake_case(requested_source)
                key = f"{nested_field}_{source_formatted}"
                result_to_keep[key] = None

    return t.Row(*list(result_to_keep.keys()))(*list(result_to_keep.values()))
Example #16
0
client = wolframalpha.Client('your-key')



import dialogflow_v2 as dialogflow
dialogflow_session_client = dialogflow.SessionsClient()
PROJECT_ID = "all-bot-yhniuh"



from gnewsclient import gnewsclient
nclient = gnewsclient.NewsClient(max_results=3)


from omdb import OMDBClient
mclient = OMDBClient(apikey="your-key")



from pymongo import MongoClient
mongo_client = MongoClient("mongodb+srv://vishav:[email protected]/test?retryWrites=true&w=majority")
db = mongo_client.get_database('all_data')







def get_movie(parameters):
	mclient.topic = parameters.get('movie_name')
Example #17
0
from flask import Flask, render_template, request, jsonify
from interface import interface
from jsonify import common
from Engine.booktest import BookEngine
from omdb import OMDBClient
from Engine.movietestRun import MovieEngine
from flask.helpers import url_for

app = Flask(__name__, static_folder='static')
ob = interface(BookEngine(), MovieEngine())

client = OMDBClient(apikey='e181a4c1')


def checkurlcontent(title):
    res = url_for('static', filename='images/nan.jpg')
    set_path = res
    try:
        res = client.get(title, year=dict(
            common.get(title)).get('Year'))[:1][0].get('poster')
    except Exception as x:
        if x:
            pass
    return res if res != 'N/A' else set_path


@app.route('/')
def index():
    return render_template('main.html')

Example #18
0
import re

from omdb import OMDBClient

from wickie.settings import OMDB_API_KEY

r_imdb_url = r"https?://(w{3}.)?imdb.com/title/(tt[0-9]*)/?"
client = OMDBClient(apikey=OMDB_API_KEY)


def extract_id(url):
    match = re.match(r_imdb_url, url)
    if match:
        return match.groups()[-1]
    return None
import sys
import json
# To access the OMDb API, we can create an ``OMDBClient`` instance:
from omdb import OMDBClient

# must use OMDb API parameters
client = OMDBClient(apikey='8ce3c73f')
print("Success, API is connected")

# Default for Rotten Tomato rating...
client.set_default('tomatoes', True)

cmd_Argument = sys.argv[1:]

try:
    # print(cmd_Argument)
    if cmd_Argument:
        print("The command line argument is : %s" % (cmd_Argument))
        # User Input
        # movie_name = str(input("Please enter movie name : "))
        # movie_year = input("Enter year as well : ")

        res1 = client.request(t=cmd_Argument,
                              plot='full',
                              tomatoes='true',
                              timeout=50)  # year = movie_year
        xml_content = res1.content

        my_json = xml_content.decode('utf8')  # .replace("'", '"')
        print('* ' * 20)
Example #20
0
from functools import reduce
from re import findall
from typing import Dict

from omdb import OMDBClient

from giru.settings import OMDB_API_KEY

omdb = OMDBClient(apikey=OMDB_API_KEY)

RATING_EMOJI = {
    'Rotten Tomatoes': '🍅',
    'Internet Movie Database': '🍿',
    'Metacritic': 'Ⓜ️'
}


def emojify_sources(s: Dict[str, str], rating: Dict[str, str]):
    source, value = rating.get('source'), rating.get('value')
    matches = findall(r"([\d.]+).*", value)
    if len(matches):
        value = matches[0]

    s[RATING_EMOJI.get(source, source)] = value

    return s


class Movie:
    def __init__(self, id=None, title=None):
        assert id or title, "Must have a title or id"
Example #21
0
def get_movie(title):

    client = OMDBClient(apikey=omdb_key)
    response = client.get(title=title, timeout=5, tomatoes='true')
    return response
Example #22
0
class Movie(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        config = Config.get_config()
        try:
            self.omdb = OMDBClient(apikey=config.get("omdbKey", None))
        except Exception as ex:
            self.bot.unload_extension("cogs.utils.movie")

    @commands.command()
    async def movie(self, ctx, *name: str):
        """: IMDb movie search

        movie title
        """
        try:
            search = self.omdb.search_movie(name)
        except Exception as ex:
            await ctx.channel.send(
                f"Daily limit reached. Unfortunately the free omdb API only supports 1000 requests per day."
            )
            return
        selected_movie = None
        if len(search) > 1:
            if (len(search) > 10
                ):  # api should only give 10 movies, but let's just limit it
                search = search[:10]

            res = ""
            numbers = list()
            for index, movie in enumerate(search):
                numbers.append(str(index) + "⃣")
                res += f"{numbers[index]} {movie.get('title', None)} ({movie.get('year', None)})\n"
            res += ""
            embed = discord.Embed(title="Please choose a movie",
                                  description=res)
            mes = await ctx.channel.send(embed=embed)
            for index in range(0, len(search)):
                await mes.add_reaction(f"{str(index)+'⃣'}")

            def check(reaction, user):
                return reaction.message.id == mes.id and user == ctx.message.author

            reaction, user = await self.bot.wait_for("reaction_add",
                                                     check=check,
                                                     timeout=60.0)
            number = numbers.index(reaction.emoji)
            selected_movie = search[number]
        else:
            selected_movie = search[0]
        movie = self.omdb.request(i=selected_movie.get("imdb_id", None))
        movie = json.loads(movie.content)
        error = ""
        plot = None
        if movie["Plot"] != "N/A":
            plot = movie["Plot"]
        awards = None
        if movie["Awards"] != "N/A":
            awards = movie["Awards"]
        poster = None
        if movie["Poster"] != "N/A":
            poster = movie["Poster"]

        embed = discord.Embed(
            title=movie.get("Title", None),
            description=plot,
            url=f'https://www.imdb.com/title/{movie.get("imdbID",None)}',
        )
        embed.add_field(name="Year", value=movie.get("Year", None))
        if poster is not None:
            embed.set_thumbnail(url=poster)
        embed.add_field(name="Genre", value=movie.get("Genre", None))
        embed.add_field(name="Actors", value=movie.get("Actors", None))
        embed.add_field(name="Director", value=movie.get("Director", None))
        if awards is not None:
            embed.add_field(name="Awards", value=awards)
        embed.add_field(name="IMDb Rating",
                        value=movie.get("imdbRating", None))
        for r in movie.get("Ratings", list()):
            embed.add_field(name=r.get("Source", None),
                            value=r.get("Value", None))
        if "mes" in locals():
            try:
                await mes.clear_reactions()
            except Exception:
                error = "⚠️ *Need manage_messages permission for full functionality.*"
            await mes.edit(content=error, embed=embed)
        else:
            await ctx.channel.send(embed=embed)
Example #23
0
import sys

import requests
from imdb import IMDb
from omdb import OMDBClient

client = OMDBClient(apikey="8381a16b")

ia = IMDb()


def get_film(name_of_the_film):
    """
    Current function creating and updating txt file.
    :param name_of_film:user must input film name

    """
    name_of_the_film = ia.search_movie(name_of_the_film)[0]
    film = ia.get_movie(ia.get_imdbID(name_of_the_film))
    film_countries = ','.join(film['country'])

    directors = []
    list_of_directors_objects = film['directors']
    for director in list_of_directors_objects:
        directors.append(director.get('name'))
    director = ",".join(directors)

    genres = ",".join(film['genres'])

    actors = []
    list_of_actors = film['cast']