Очистка нескольких видео данных, которые присутствуют в канале, с помощью API YouTube 3 в Python - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь удалить видео с канала YouTube. Для этого я удалил все URL-адреса видео, которые присутствуют на одном конкретном канале.

С этими видео Url пытается получить данные каждого видео с помощью YouTube API 3.

Я сохранил все URL-адреса видео в списке и передал список функции для очистки данных о видео.

Я пытался зациклить все URL, я получаю только одну запись. В столбце идентификатора видео я получаю все идентификаторы в одной строке внутри массива.

Пожалуйста, дайте мне знать, где я ошибся.

from apiclient.discovery import build
import argparse
import csv
import unidecode

DEVELOPER_KEY = "XXXXX"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

class Something:

    def youtube_video(self,video_id):

        global video_result

        youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY)

        videos = []
        channels = []
        playlists = []
        videoresult = []

        #video_id = len(video_id)

        for ids in range(0,len(video_id)):
            video_sample = youtube.videos().list(id=video_id[ids],part="id,snippet").execute()

            #print(video_sample)


            csvFile = open('youtube_video_data_testing1.csv','w')
            csvWriter = csv.writer(csvFile)
            csvWriter.writerow(["title","videoId","viewCount","likeCount","dislikeCount", "commentCount","favoriteCount"])


            for search_result in video_sample.get("items", []):
                if search_result["kind"] == "youtube#video":

                    title = search_result["snippet"]["title"]
                    title = unidecode.unidecode(title)
                    #ids = search_result["id"]
                    video_response = youtube.videos().list(id=video_id[ids],part="statistics").execute()
                    #print(video_response)
                    #video_id.append(ids)

                    for video_result in video_response.get("items",[]):
                            viewCount = video_result["statistics"]["viewCount"]
                            if 'likeCount' not in video_result["statistics"]:
                                    likeCount = 0
                            else:
                                    likeCount = video_result["statistics"]["likeCount"]
                            if 'dislikeCount' not in video_result["statistics"]:
                                    dislikeCount = 0
                            else:
                                    dislikeCount = video_result["statistics"]["dislikeCount"]
                            if 'commentCount' not in video_result["statistics"]:
                                    commentCount = 0
                            else:
                                    commentCount = video_result["statistics"]["commentCount"]
                            if 'favoriteCount' not in video_result["statistics"]:
                                    favoriteCount = 0
                            else:
                                    favoriteCount = video_result["statistics"]["favoriteCount"]


                    nextPageToken = video_result.get('nextPageToken')
                    while ('nextPageToken' in video_result):
                        nextPage = youtube.videos().list(id=video_id[ids],part="statistics").execute()
                        video_result['items'] = video_result['items'] + nextPage['items']

                    if 'nextPageToken' not in video_result:
                        video_result.pop('nextPageToken', None)
                    else:
                        nextPageToken = video_result['nextPageToken']

                    #videoresult.append(video_result)

                    csvWriter.writerow([title,video_id,viewCount,likeCount,dislikeCount, commentCount,favoriteCount])

            #csvFile.close()

                    return video_result

s = Something()
s.youtube_video(data)

Я получаю вывод, подобный этому, для одной записи.

 title,videoId,viewCount,likeCount,dislikeCount,commentCount,favoriteCount

 How to make video marketing work for your business? (Genius Talk Ft.
 Michael Brenner),"['sds0bFbkP9U', 'jHGOtEpKMTg', 'CxkytEeaeoM',
 '7bVblNUuQNU', 'UBQNCokuvsA', 'jkGNEgpwxAw', 'kVt3CtnFD90',
 'zDXX7jA4clg', 'BLD9cMILHCU', 'YPjP7UvRhns', 'E6DDA7PX4qA',
 'L9yYwpowSQE', 'Q5EFZp1Dq30', 'ChxqD72CiL0', 'w6_E2IgSza0',
 'gLrL3rkO5TM', 'MsIu-nIYfds', 'VAr3aV-aFCI', 'WrLnQtqmtaE',
 'xwdBEIammiQ', 'i2PRiIEh-7c', '4E9TmuZZAp4', 'UdKkfuYCAjA',
 'kv6lqSwZJLw', 'S5AfpHHTPVg', 'sGLg0NqAyK0', 'GH5tF063-Og',
 'pDz2ZVp14JU', 'Zn0HQ3kk5mk', 'tvt588IHPSo', '1hvtiFOsb7Y',
 'BKBfBMS9Xuw', 'bIBahCXR10w', 'e0DUIRms_bg', 'VrT7RDh817U',
 'qoqzcYmKn6w', 'sfNC3UaVhNs', 'LbMmS4hLnoo', 'ohwDFePuhlU',
 'VcvkgKElFw0', 'gSMWkdH2rbk', 'cE3hngrYF9I', 'PGoazo0kE9Q',
 'dnWM7Ay67y0', 'fAWRxMhaNsk', 'Q1pEePqeAYc', 'WZs-yZvyhUA',
 'S48cAk_sISs', 'B3uIHj8zxLc', '9OaOo55zbss', 'POtMS7pTR28',
 'Qe1aLETVr9s', 'NWUXJJDukF0', 'NaImKCWyPyU', 'WK-Ou-8dQ4U',
 'm9-RGcr6KN4', '6__glAsOhno', 'rG9Gt_EaN34', 'mXnI2Ojpvyo',
 'EAn-UJZWJY4', 'W-uu717R2gU', 'cnjl7Hl1QF0', 'Oq5SykGHsrA',
 'lpEoiSQVwM4', '_W-f0GOde8Q', 'wLlzgCMJfmw', 'ofNY5Z2zfZc',
 'zHq0S274s1U', 'zVBDHEvyMFs', 'E1-GoEMOm4U', 'HqKJC4267Dc',
 'lYHvaGOJ4jw', 'l8w60VYS0J0', 'Tl-WSyRK7lI', 'DxtL8u2zgqg',
 'OgrurImBf54', 'GLe-k-ct8eA', 'INrHlrSqioU', 'ZmKnf8Ya3jU',
 'afAppKJHBr0', 'kIvdH5mCHeE', 'xlZL_sJGQ5I', '8S8Kon7JsmA',
 'AfM1_jMoBlE', 'FGMzszYrHGI', 'v5rBe6nYyeQ', 'XPnXdn1r724',
 'yQ3ZitZun8s', 'kzLMD5RXBew', 'SPFfYlAMvuI', 'VZDbslni3DQ',
 'Hv397JnNWYc', 'qy7xbEguv8U', 'BGCOfz8M0bQ', 'L1bd16AwvMg',
 'mPrydY0mpfQ', '-V028-D0GkQ', 'hlYsJJAZm7k', '8TGa_RdxegU',
 'HSENz13ZFxo', 'WqwqzJKa7u0', 'l9YVD0bZ4Io', '5fLZXZgsByo',
 'j-4zwpMUsCY', 'PXSXWjfSqY4', 'YUgmIX9V91M', 'fligYEdU34Q',
 'WMtfbEMgxlU', 'fU4Kx1emu9E', 'OwcMbm7qPAQ', 'FAEUCz9Wt2k',
 '00Hn4RKvEhI', 'wrzsudecHQ0', '4aXffNV-UHs', '3ceG3y224VU',
 '1i8KpWev-Ug', 'buvZWcik9hE', '0o4fFgBdQqQ', 'GwQK_fuXU1w',
 'LCbKy0PC9SY', '48rbra_J6W0', 'nS2pPRzb4lg', 'D-2Voa3XmTU',
 'rsxP3FI8kq8', 'ImTiE7_Qz9M', '9_RwsrgDc0A', 'F0OLsdepsVg',
 '78HvcSgNDAQ', 'vnOJPYHIIXc', 'g_rLw2FoRbg', 'sds0bFbkP9U',
 'sds0bFbkP9U']",83,3,0,2,0

Мне нужно получить данные для всего видео, которое я пропустил в списке.

Мой список образцов - ['sds0bFbkP9U', 'jHGOtEpKMTg', 'CxkytEeaeoM'] выглядит следующим образом (Все videoID, которые доступны в канале)

Ожидаемый выходной образец для 3 записей:

 title,videoId,viewCount,likeCount,dislikeCount,commentCount,favoriteCount
    1. How to make video marketing work for your business? (Genius Talk Ft. Michael Brenner),sds0bFbkP9U,83,3,0,2,0
    2. video name 2 , g_rLw2FoRbg, 78,0,9,2
    3. videoname 3 , sds0bFbkP9U,  98,0,23,76

1 Ответ

0 голосов
/ 18 мая 2019

При попытке записать CSV-файл что-то пошло не так.

csv_list = []
filename = 'crashcourse.csv'

with open(filename, 'a') as f:
    writer = csv.writer(f)


    writer.writerow(('title','videoId','viewCount','likeCount','dislikeCount','commentCount','favoriteCount'))

csv_list.append(['title','videoId','viewCount','likeCount','dislikeCount','commentCount','favoriteCount'])
writer.writerow([title,ids,viewCount,likeCount,dislikeCount, commentCount,favoriteCount])

Приведенный выше код работал для меня.

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