Сканирование информации о YouTube - PullRequest
1 голос
/ 04 июня 2011

Я пытаюсь сканировать Youtube, чтобы получить информацию о группе пользователей (около 200 человек).Я заинтересован в поиске отношений между пользователями:

  • контакты
  • подписчики
  • подписки
  • какие видео они прокомментировали
  • и т. Д.

Мне удалось получить контактную информацию из следующего источника:

import gdata.youtube
import gdata.youtube.service
from gdata.service import RequestError
from pub_author import KEY, NAME_REGEX
def get_details(name):
    yt_service = gdata.youtube.service.YouTubeService()
    yt_service.developer_key = KEY
    contact_feed = yt_service.GetYouTubeContactFeed(username=name)
    contacts = [ e.title.text for e in contact_feed.entry ]
    return contacts

Не могу получить другие нужные мне сведения.Справочное руководство говорит, что я могу получить ленту XML с http://gdata.youtube.com/feeds/api/users/username/subscriptions?v=2 (для произвольного пользователя).Однако, если я пытаюсь получить подписки других пользователей, я получаю сообщение об ошибке 403 со следующим сообщением:

Пользователь должен войти в систему для доступа к этим подпискам.

Если я использую API gdata:

sub_feed = yt_service.GetYouTubeSubscriptionFeed(username=name)
sub = [ e.title.text for e in contact_feed.entry ]

, то получаю ту же ошибку.

Как получить эти подписки без входа в систему?Это должно быть возможно, поскольку вы можете получить доступ к этой информации, не заходя на сайт Youtube.

Кроме того, похоже, что нет подписки для подписчиков конкретного пользователя.Доступна ли эта информация через API?

РЕДАКТИРОВАТЬ

Итак, похоже, что это невозможно сделать через API.Мне пришлось сделать это быстрым и грязным способом:

for f in `cat users.txt`; do wget "www.youtube.com/profile?user=$f&view=subscriptions" --output-document subscriptions/$f.html; done

Затем использовать этот скрипт, чтобы получить имена пользователей из загруженных файлов HTML:

"""Extract usernames from a Youtube profile using regex"""
import re
def main():
    import sys
    lines = open(sys.argv[1]).read().split('\n')
    #
    # The html files has two <a href="..."> tags for each user: once for an 
    # image thumbnail, and once for a text link.
    # 
    users = set()
    for l in lines:
        match = re.search('<a href="/user/(?P<name>[^"]+)" onmousedown', l)
        if match:
            users.add(match.group('name'))
    users = list(users)
    users.sort()
    print users
if __name__ == '__main__':
    main()

1 Ответ

2 голосов
/ 04 июня 2011

Чтобы получить доступ к каналу подписок пользователя без входа в систему, пользователь должен установить флажок «Подписаться на канал» в своих настройках общего доступа к учетной записи .

В настоящее время нет прямого способа получить подписчиков канала через gdata API. На самом деле, мы получили запрос на выдачу новых функций, который остается открытым более 3 лет! См. Получение списка подписчиков пользователя? .

...