Оптимизация количества запросов API YouTube - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь создать график 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')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...