Очень простое «Случайное видео ie Windows приложение», которое получает данные из Trakt.tv Watchlist - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь создать простое приложение windows для выбора случайного движения ie из моего списка наблюдения trakt.tv, я использовал tkinter для основы c gui, затем использую случайную функцию для выбора движения ie из txt файла, затем с функцией библиотеки trakt я получаю свой список наблюдения из trakt и записываю его как txt для случайного выбора, определяю функцию для одной из моих кнопок, чтобы выбрать оттуда случайный mov ie, и показываю это в текстовом поле. Это работает таким образом, но теперь я хочу добавить обзор, рейтинг, информацию о годах, связанных со случайным mov ie, это работает хорошо только для «некоторых названий», но некоторые фильмы получают следующее сообщение об ошибке; "trakt.errors.NotFoundException: Not Found - метод существует, но запись не найдена"

Я думаю, что имена некоторых mov ie не могут получить прямой результат от trakt.tv, так что может быть решением для этого? Например; я могу получить trakt_id из списка наблюдения и использовать его для всей другой информации и как? Я проверяю файлы библиотеки, но кажется, что получаю информацию непосредственно на сайте со списком пользователей, и я не мог понять, как я могу получить любую другую информацию оттуда. Также, как я могу добавить случайный фанарт под кнопками, относящимися к mov ie, который выбирается случайным образом?

Извините, мой Engli sh и если я не могу хорошо объяснить свои вопросы:)

Мой код ниже;

# -*- coding: utf8 -*-
import random
from tkinter import *
from trakt import init
from trakt.users import User
from trakt.movies import Movie
import tkinter as tk

### For Trakt.tv Authorize and Save It
### init('myusername', store=True)

my = User('username') ## Must be your username
watchlist = my.watchlist_movies
f=open("watchmovies.txt","w", encoding='utf-8')
f.write(str(watchlist))
f.close()

# TXT DOSYASINI DÜZENLEME
# Read in the file
with open('watchmovies.txt', 'r') as file :
  filedata = file.read()
# Replace the target string
filedata = filedata.replace('[', '')
filedata = filedata.replace(']', '')
# Write the file out again
with open('watchmovies.txt', 'w') as file:
  file.write(filedata)
# New Line for Commas
f1=open("watchmovies.txt","r+")
input=f1.read()
print(input)
input=input.replace('<Movie>:','\n')
input=input.replace(',','')
f2=open("watchmovies.txt","w+")
f2.write(input)
f1.close()
f2.close()

# Pencere oluşturma
window = Tk()
window.title("Pick A Movie For Me")
window.geometry("300x500")
window.configure(background='black')

# Yazı Alanı oluşturma
T = Text(window, height=15, width=40, wrap = WORD)
T.configure(background='orange')
T.pack()

# Random bilgi için kaynak dosyası
lines = open('watchmovies.txt').read().splitlines()

# Buton işlemi
def callback():
    myline = random.choice(lines)
    print(myline)
    myline2 = Movie(str(myline))
    yeary = str(myline2.year)
    ratingy = str(myline2.rating)[:4]
    overviewy = str(myline2.overview)
    T.delete('1.0', END)
    showline= "\n" + myline + " " + ratingy + "\n" + yeary  + "\n" + "\n" + overviewy
    T.insert("1.0", showline)
    T.tag_add('center', "1.0", "end")
    T.tag_configure("center", justify='center', font='Calibri 11 bold')

# Butonlar
b = Button(window, text="Good Luck!", command=callback)
b.configure(background='black', foreground='white')
b.pack()
c = Button(window, text="Close", command=window.quit)
c.configure(background='black', foreground='white')
c.pack()

mainloop()

Код финальной ситуации после того, как я обработал все:

# -*- coding: utf8 -*-
import random
import os
from tkinter import *
import tkinter as tk
from trakt import init
from trakt.users import User
from trakt.movies import Movie
from IMDBAPI import IMDB
from tmdbv3api import TMDb
from tmdbv3api import Movie
from urllib.request import urlopen
from PIL import Image, ImageTk
from io import BytesIO

## FOR IMDB, TMDB, TRAKT API 
imdb = IMDB()
tmdb = TMDb()
tmdb.api_key = '<YOUR_TMDB_API_KEY>'
my = User('<YOUR_TRAKT_USER_NAME>')

## Trakt.tv Watchlist 
watchlist = my.watchlist_movies
f=open("watchmovies.txt","w", encoding='utf-8')
f.write(str(watchlist))
f.close()

# TXT FILE
# Read in the file
with open('watchmovies.txt', 'r') as file :
  filedata = file.read()
# Replace the target string
filedata = filedata.replace('[', '')
filedata = filedata.replace(']', '')
# Write the file out again
with open('watchmovies.txt', 'w') as file:
  file.write(filedata)
# New Line for Commas
f1=open("watchmovies.txt","r+")
input=f1.read()
print(input)
input=input.replace('<Movie>:','\n')
input=input.replace(',','')
f2=open("watchmovies.txt","w+")
f2.write(input)
f1.close()
f2.close()

# File for Random 
lines = open('watchmovies.txt').read().splitlines()

# Button Functions
def callback():
    ### TEXT INFOS
    myline = str(random.choice(lines))
    imdbtt = IMDB.getIdFromName(myline)
    ratingy = imdb.getRatingByImdbId(imdbtt)
    summary = imdb.getSummaryByImdbId(imdbtt)
    query_url = 'https://api.themoviedb.org/3/search/movie?api_key=<YOUR_API_KEY>&query='
    ## ARRANGMENTS FOR TMDB IMAGE SEARCH
    myline2 = myline.replace(' ', '%20')
    moviename = myline2
    title2 = query_url + moviename
    link = title2
    f = urlopen(link)
    myfile = f.read()
    f = open("posterurl.txt", "w", encoding='utf-8')
    f.write(str(myfile))
    f.close()
    f3 = open("posterurl.txt", "r+")
    input = f3.read()
    input = input.replace('\\/', '\n')
    input = input.replace('jpg"', 'jpg\n')
    f4 = open("posterurl.txt", "w+")
    f4.write(input)
    f3.close()
    f4.close()
    file = open("posterurl.txt", "r")
    posterdata = file.readlines()
    posterurl = 'https://image.tmdb.org/t/p/w185/' + posterdata[1]
    ##TEXT SETTINGS
    global showline
    showline = "\n" + myline + "\n" + ratingy + "\n"
    global showline2
    showline2 = "\n" + summary
    ## GETTING IMAGE URL
    URL = posterurl
    u = urlopen(URL)
    raw_data = u.read()
    u.close()
    im = Image.open(BytesIO(raw_data))
    global photo
    photo = ImageTk.PhotoImage(im)

# Actions to GUI
def guishow():
    ##IMAGE TO GUI
    global window2
    window2.pack_forget()
    window2 = tk.Label(image=photo)
    window2.image = photo
    window2.pack()
    ## TEXTS TO GUI
    T.delete('1.0', END)
    T.insert("1.0", showline)
    T.tag_add('center', "1.0", "end")
    T.tag_configure("center", justify='center', font='Calibri 11 bold')
    T2.delete('1.0', END)
    T2.insert("1.0", showline2)
    T2.tag_add('center', "1.0", "end")
    T2.tag_configure("center", justify='center', font='Calibri 10 bold')

# GUI: MAIN WINDOW
window = Tk()
window.title("Pick A Movie For Me")
window.geometry("300x600")
window.configure(background='black')
window2 = Frame(window)
window2.pack(side="bottom", expand=True, fill="both")
window2.configure(background='black')

# GUI: TEXT AREA
T = Text(window, height=5, width=40, wrap = WORD)
T.configure(background='darkgray')
T.pack()

# GUI: TEXT AREA 2
T2 = Text(window, height=8, width=40, wrap = WORD)
T2.configure(background='gray')
T2.pack()

## BUTTON FUNCTIONS MERGING
def buttoncase():
     callback()
     guishow()

# BUTTONS
b = Button(window, text="Good Luck!", command=buttoncase)
b.configure(background='black', foreground='white')
b.pack()
c = Button(window, text="Close", command=window.quit)
c.configure(background='black', foreground='white')
c.pack()

mainloop()

1 Ответ

0 голосов
/ 12 февраля 2020

Для добавления изображения вам нужно создать экземпляр PhotoImage с путем к файлу вашего изображения. Затем, когда вы хотите отобразить изображение, у вас есть несколько вариантов виджетов, которые могут содержать изображения, но я бы рекомендовал использовать Label в этом случае. Поэтому создайте экземпляр Label с ключевыми словами, которые вам нравятся, и установите image=<your image variable>. Убедитесь, что у вас нет только экземпляра PhotoImage во временной переменной. То есть когда вы делаете все это внутри класса, вы можете сделать переменную PhotoImage переменной класса. В противном случае, вы можете сделать его вложенной переменной вашего виджета Label. В конце концов, это ваш собственный выбор. Для ваших изображений вы ограничены .png, .pkg, .gif (не насколько я знаю) и немного больше (посмотрите на effbot.org). Вы также можете использовать .bmp, но тогда вам нужно будет использовать BitmapImage вместо PhotoImage. Маленький пример:

from tkinter import Tk,Label,PhotoImage #Python 3.x -> replace 'tkinter' with 'Tkinter' in Python 2.x

root=Tk()
img=PhotoImage(file='yourpath/Image.png')
label=Label(root,image=img)
label.pack()
label.image=img #if not in a class
#self.image=img #if in a class
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...