Я пытаюсь создать график XY для своей работы в университете:
X: "Соотношение" нравится / не нравится "(0-100%)
Y: процентное соотношение видео на YouTube с таким соотношением" нравится / не нравится " .
Таким образом, я написал этот код для извлечения случайных видео на YouTube + извлечения количества лайков / дислайков.
Но у моего университета ограниченные ресурсы, поэтому я хочу снизить стоимость запросов API, но по-прежнему около 100 000 видео для точных результатов.
Благодаря this я знаю, что запрос "поиск" - это тот, кто потребляет больше квоты.
I попробовал упаковать количество видео в случайном поиске на 100, но я не знаю, умно ли это.
Знаете ли вы какой-нибудь способ оптимизировать количество запросов? Спасибо!
# Libraries for getting random youtube videos
import json
import urllib.request
import string
import random
# Libraries for getting likes count
import os
import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors
# Create authentification object
def main():
# Disable OAuthlib's HTTPS verification when running locally.
# *DO NOT* leave this option enabled in production.
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
api_service_name = "youtube"
api_version = "v3"
client_secrets_file = "YOUR_CLIENT_SECRET_FILE.json"
# Get credentials and create an API client
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
client_secrets_file, scopes)
credentials = flow.run_console()
youtube = googleapiclient.discovery.build(
api_service_name, api_version, credentials=credentials)
return youtube
scopes = ["https://www.googleapis.com/auth/youtube.readonly"]
if __name__ == "__main__":
youtube = main()
# Get 100 youtube videos per request
count = 100
API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxx"
# Write results to file.
with open('urls_and_like_ratios.txt', 'a') as myFile:
while True: # Do it until API max number of request reached
# Generate random youtube video ID
randStr = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(3))
urlData = "https://www.googleapis.com/youtube/v3/search?key={}&maxResults={}&part=snippet&type=video&q={}".format(API_KEY,count,randStr)
webURL = urllib.request.urlopen(urlData)
data = webURL.read()
encoding = webURL.info().get_content_charset('utf-8')
results = json.loads(data.decode(encoding))
for data in results['items']:
videoId = (data['id']['videoId'])
print(videoId) # Print video ID to see it running.
# Request asking for statistics
request = youtube.videos().list(
part="id, statistics",
id=videoId
)
resp = request.execute()
# Extract likeCOunt and check wether = 0
if "likeCount" in resp['items'][0]['statistics']:
likes = float(resp['items'][0]['statistics']['likeCount'])
else:
likes = 0
if "dislikeCount" in resp['items'][0]['statistics']:
dislikes = float(resp['items'][0]['statistics']['dislikeCount'])
else:
dislikes = 0
# Append to file
if likes!=0:
myFile.write(videoId + ',' + str(1-dislikes/likes))
elif dislikes!=0:
myFile.write(videoId + ',0')