2013-02-18 85 views
3

我試圖檢索特定用戶組訂閱數和訂閱者數。我正在使用YouTube API for Python。檢索特定用戶組訂閱數和訂閱者數

我爲訂閱數寫了以下代碼。此代碼從列表中逐一讀取用戶的ID,統計其訂閱數量,並將ID和數字寫入CSV文件。但它不能正常工作。在少數第一位用戶停止在文件中寫入數字之後,數字並非都是正確的。 我認爲應該有比這個混亂更簡單的東西。

謝謝,我感謝您的建議和意見。

import os 
import gdata.youtube 
import gdata.youtube.service 
import time 


def GetUserUrl (username): 

    yt_service = gdata.youtube.service.YouTubeService() 
    uri = 'https://gdata.youtube.com/feeds/api/users/%s/subscriptions?max-results=50&start-index=1' % username 
    subscription_feed = yt_service.GetYouTubeSubscriptionFeed(uri) 
    T1 = GetUserSub(subscription_feed) 
    final = 0 
    j = 1 
    total = 0 
    while j<800: 
     j = j + 50 
     sj = str(j) 
     uri = 'https://gdata.youtube.com/feeds/api/users/%s/subscriptions?max-results=50&start-index=' % username+sj 
     subscription_feed = yt_service.GetYouTubeSubscriptionFeed(uri) 
     T2 = GetUserSub(subscription_feed) 
     total = total + T2 

    final = total + T1 
    usersub.writelines([str(username),',',str(final),'\n']) 

def GetUserSub (subscription_feed): 

    i = 0 
    for entry in subscription_feed.entry: 
    i = i +1 
    return i 

usersub = open ('usersubscribtions.csv','w') 
users=[] 
userlist = open("user_ids_noduplicates1.txt","r") 
text1 = userlist.readlines() 

for l in text1: 
     users.append(l.strip().split()[0]) 
x = 0 
while (x<len(users)): 

try: 
    GetUserUrl(users[x]) 
    time.sleep(0.4) 
    x = x+1 
except: 
    usersub.writelines([str(users[x]),'\n']) 
    x = x+1 
    pass 

usersub.close() 

回答

3

如果你只是想獲得用戶的總數,你並不需要計算一個飼料項目 - 這是在數據API V3所提供的價值。

你只需要做出與用戶的渠道ID的信道資源的調用你正在尋找起來: https://www.googleapis.com/youtube/v3/channels?part=statistics&id=UCDsO-0Yo5zpJk575nKXgMVA&key={YOUR_API_KEY}

響應:

{ 
"kind": "youtube#channelListResponse", 
"etag": "\"O7gZuruiUnq-GRpzm3HckV3Vx7o/wC5OTbvm5Z2-sKAqmTfH4YDQ-Gw\"", 
"pageInfo": { 
    "totalResults": 1, 
    "resultsPerPage": 1 
}, 
"items": [ 
    { 
    "id": "UCDsO-0Yo5zpJk575nKXgMVA", 
    "kind": "youtube#channel", 
    "etag": "\"O7gZuruiUnq-GRpzm3HckV3Vx7o/xRjATA5YtH9wRO8Uq6Vq4D45vfQ\"", 
    "statistics": { 
    "viewCount": "80667849", 
    "commentCount": "122605", 
    "subscriberCount": "4716360", 
    "videoCount": "163" 
    } 
    } 
] 
} 

正如你所看到的,subscriberCount包括在迴應中。

+0

感謝馬特的答案。這聽起來很直接,但我不完全明白它是如何工作的。我瀏覽了文檔:https://developers.google.com/youtube/v3/docs/channels。但我不明白我應該如何設置參數(我認爲我應該將用戶標識分配給'id')以供https://www.googleapis.com/youtube/v3/channels使用,並撥打電話。 – DMD 2013-02-19 12:33:23

+0

查看我的答案,看看如何獲​​得頻道的ID,當你只有他們的用戶名:http://stackoverflow.com/questions/14760497/search-youtube-videos-by-author/14761305#14761305。用戶的ID是這種格式:UCDsO-0Yo5zpJk575nKXgMVA – 2013-02-19 18:15:32