YouTube PHP API: Убедитесь, что имя пользователя YouTube соответствует токену аутентификации - PullRequest
2 голосов
/ 28 июля 2011

У меня есть веб-приложение, в котором пользователь регистрируется на YouTube, чтобы авторизовать мое веб-приложение для доступа к своей учетной записи. Однако мне нужно, чтобы их имя пользователя YouTube действительно отображало их загруженные видео, и я хочу убедиться, что предоставленное ими имя пользователя YouTube соответствует учетной записи, с которой они авторизуются. Другими словами, я хочу, чтобы пользователь мог обмениваться загруженными ими видео, а не чужими. Есть ли способ сделать это?

Я делал это раньше с C # .Net со следующим кодом:

YouTubeRequestSettings yt_settings = new YouTubeRequestSettings(<devID name>, devKey, auth);
YouTubeRequest yt_request = new YouTubeRequest(yt_settings);

Uri uri = new Uri("http://gdata.youtube.com/feeds/api/users/default/uploads/?start-index=1&max-results=1");
Feed<Video> videoFeed = yt_request.Get<Video>(uri);
string uploader = "";
if (videoFeed.Entries.Count() > 0)
    uploader = videoFeed.Entries.ElementAt(0).Uploader;

Но когда я пытаюсь что-то похожее с php, я получаю то, что кажется стандартным фидом:

    $yt = new Zend_Gdata_YouTube($http_client,<devID name>,null,$_yt_dev_key);
$feed_url = urlencode("http://gdata.youtube.com/feeds/api/users/default/uploads/?start-index=1&max-results=1");
$videoFeed = $yt->getVideoFeed();
if(count($videoFeed) > 0)
{
    $videoEntry = $videoFeed[0];
    echo var_dump($videoEntry);
}

Кто-нибудь есть идеи, если я делаю что-то не так?

------------------ ОБНОВЛЕНИЕ ----------------------

У меня есть решение получить видео с YouTube для пользователя во время сеанса с проверкой подлинности. $ videoFeed = $ yt-> getuserFeed ("по умолчанию"); Тем не менее, я все еще смотрю, как получить имя загрузчика из этого, чтобы я мог выполнять дальнейшие списки видео непосредственно из javascript (как я делал с моим старым веб-приложением C # / Asp .Net).

----------- СКОРОСТНОЕ РЕШЕНИЕ ------------

Ну, это не совсем элегантное решение, но это то, над чем я работаю.

Следующее извлечет имя пользователя YouTube из объекта VideoEntry ...

$videoFeed = $yt->getuserUploads("default");
if(count($videoFeed) > 0)
{
    $videoEntry = $videoFeed[0];
    $v_dump = var_export($videoEntry, true);
    $check_for = "http://gdata.youtube.com/feeds/api/users/";
    $pos = strpos($v_dump,$check_for);
    $start_pos = $pos + strlen($check_for);
    $user_name = "";
    for($i = $start_pos; $i < strlen($v_dump); $i++)
    {
        if(($v_dump[$i] == '/') or ($v_dump[$i] == '?'))
            break;
        $user_name .= $v_dump[$i];
    }
    echo $user_name;
}

По сути, я анализирую все строковые представления записи видео для первой общей части URL канала, затем получаю следующий токен в URL, который является именем пользователя. Другими словами, я нахожу этот URL в дампе var и анализирую имя пользователя:

http://gdata.youtube.com/feeds/api/users/<username>/uploads

Если бы кто-нибудь смог найти лучший и более чистый способ сделать это, это было бы здорово. Анализ такой большой строки кажется очень грязным способом сделать это.

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Попробуйте это:

$user = $yt->getUserProfile('default');
$username = $user->getUserName();
1 голос
/ 29 июля 2011

См. http://code.google.com/apis/youtube/2.0/developers_guide_php.html#Enabling_user_interaction

Там написано,

Note: Using the string default instead of a username retrieves the profile of the currently authenticated user.

Таким образом, вы можете получить все пользовательские данные о текущем аутентифицированном пользователе, используя это.

Надеюсь, это поможет!

...