#python #mysql #youtube-api
#python #mysql #youtube-api
Вопрос:
итак, я делаю проект для API Youtube и мне нужно искать фильмы. Он подключен к моей базе данных MySQL, которая называется moviereviews . У меня есть таблица с именем films внутри и внутри этой таблицы есть столбцы, такие как «заголовок» или «описание» и т. Д., Которые вы увидите в моем коде. Мне нужно запустить мой код Python, чтобы записи, которые у меня есть, были вставлены в мою базу данных MySQL. Я получаю ошибку string indexes, поэтому мне нужна помощь в ее исправлении. В настоящее время я могу запустить только один фильм, но для моего проекта мне нужно запустить 3. Я также не знаю, верна ли остальная часть моего кода после текущей ошибки, которая у меня есть. Извлек мой ключ api. Надеюсь, я смогу получить некоторую помощь, спасибо.
import mysql.connector
from googleapiclient.discovery import build
api_key = ''
youtube = build('youtube', 'v3', developerKey=api_key)
moviereview = youtube.search().list(q="Tenet - Movie Review", part="id,snippet", type='video', maxResults=0, pageToken=None)
response = moviereview.execute()
mydb = mysql.connector.connect(host='localhost',
user='kkkoenn',
password='onnnnnoo',
database = "moviereview"
)
mycursor = mydb.cursor()
for movie in response:
title = movie['title'] #"this is where I am getting the error"
description = movie['description']
frame = movie['thumbnails']
releaseDate = movie['publishDate']
channel = movie['channelTitle']
sql = "INSERT INTO films (Title, Description, Frame, ReleaseDate, Channel) VALUES (%s, %s, %s, %s, %s)"
val = (title, description, frame, releaseDate, channel)
mycursor.execute(sql, val)
mydb.commit()
print("records inserted")
Комментарии:
1. Проверьте, что
movie
содержит. Возможно, вы получаете массив массив объектов.
Ответ №1:
Здесь ответом является словарь. Итак, сначала вам нужно получить элементы, используя response ['items']
. И тогда вы можете сначала распечатать каждый элемент и проверить свойства самого элемента.
Лучше всего использовать .get
метод для доступа к любому объекту со значением по умолчанию, чтобы не получить никаких ошибок включения. Пример: response.get('items', [])
movies = response.get('items', [])
for movie in movies:
print(movie)
print(type(movie))
title = movie['title'] # or equivalent movie.get('title', None) would work
description = movie['description']
frame = movie['thumbnails']
releaseDate = movie['publishDate']
channel = movie['channelTitle']
Комментарии:
1. Итак, если бы я сделал response.get(‘items’, []), должен ли я иметь каждый объект, такой как заголовок, описание и т. Д. По отдельности? Например, response.get(‘items’, [title]) ? А также, я должен сделать response.get перед циклом for правильным? @VaibhavPatel
2. Обновлен ответ.
3. Поэтому, когда я использовал title = movie[‘title’] Я получил сообщение об ошибке KeyError: ‘title’. Однако, когда я попробовал movie.get(‘title’, None), я получил сообщение об ошибке TypeError: объект ‘builtin_function_or_method’ не подлежит подписке. Не уверен, что это значит. @VaibhavPatel
4. Можете ли вы напечатать, что содержит объект movie, и добавили ли вы
movies = response.get('items', [])
строку?5. Я напечатал (фильм) и получил вывод фильма «принцип», который я установил в своем списке поиска. И да, movies = response.get(‘items’, []) был включен при запуске кода. @VaibhavPatel