كيف يمكنني تسجيل الدخول إلى موقع يوتيوب باستخدام بيرل?

StackOverflow https://stackoverflow.com/questions/803832

  •  03-07-2019
  •  | 
  •  

سؤال

أنا أحاول أن أكتب Perl للاتصال علي حساب يوتيوب ولكن لا يبدو أن العمل.أساسا أنا فقط أريد للتواصل حسابي ولكن يبدو أنه لا يعمل.أنا حتى لا أملك فكرة عن كيف يمكن تصحيح هذا!ربما هو شيء متعلق https البروتوكول ؟

يرجى تنوير لي!شكرا مقدما.

use HTTP::Request::Common;
use LWP::UserAgent;
use strict;

my $login="test";
my $pass = "test";
my $res = "";
my $ua = "";

# Create user agent, make it look like FireFox and store cookies
$ua = LWP::UserAgent->new;
$ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20051213 Firefox/1.0.7");
$ua->cookie_jar ( {} );

# Request login page 
$res = $ua->request(GET "https://www.google.com/accounts/ServiceLogin?service=youtube&hl=en_US&passive=true&ltmpl=sso&uilel=3&continue=http%3A//www.youtube.com/signup%3Fhl%3Den_US%26warned%3D%26nomobiletemp%3D1%26next%3D/index");
die("ERROR1: GET http://www.youtube.com/login\n") unless ($res->is_success);


# Now we login with our user/pass
$res = $ua->request(
        POST "https://www.google.com/accounts/ServiceLoginAuth?service=youtube",
        Referer => "http://www.youtube.com/login",
        Content_Type => "application/x-www-form-urlencoded",
        Content => [
                currentform     => "login",
                next            => "/index",
                username        => $login,
                password        => $pass,
                action_login    => "Log+In"
        ]
        );

# YouTube redirects (302) to a new page when login is success
# and returns OK (200) if the login failed.
#die("ERROR: Login Failed\n") unless ($res->is_redirect());


print $res->content;

ما أقوم به هو تعلم ميزات ويب perl, لذلك أنا لا أميل إلى استخدام أي مكتبة إلا wwwlib أو مكننة لانجاز هذه المهمة.كيف يمكنني ربط حسابي باستخدام بيرل السيناريو ؟ هذا هو هدفي الآن آمل شخص يمكن نشر النص أو تصحيح الألغام.شكرا لكم على مساعدتكم.أنا اختبار Webscarab الآن..

هل كانت مفيدة؟

المحلول

ما هي البيانات التي تحاول انتزاع؟ لماذا لا مجرد استخدام عملية تنفيذ حالية مثل WebService::YouTube

وبعض التعليقات على التعليمات البرمجية الخاصة بك: أنا دائما تجنب طريقة الاختصار $ua->request(GET/POST) منذ انتهى دائما تحتاج إلى المزيد من المرونة الا ان استخدام <لأ href = "http://search.cpan.org/perldoc/HTTP::Request "يختلط =" noreferrer نوفولو "> HTTP::Request و HTTP::Response المسموح بها. لقد شعرت دائما كان رمز نظافة بهذه الطريقة أيضا.

وماذا الشفرة لا تعمل؟ من تعرف. تأكد cookiejar هي إضافة الكوكيز الخاص بك إلى HTTP::Request . أنا أقترح إلقاء كل ما تبذلونه من رؤوس عندما كنت تفعل ذلك في المتصفح ومقارنة مع رؤوس والبيانات التي <وأ href = "http://search.cpan.org/dist/libwww-perl/" يختلط = "نوفولو noreferrer "> libwww يرسل. قد يكون هناك بعض الحقول الإضافية التي تم التحقق من أن تختلف عن كل ضرب. ويمكن التحقق من سلسلة UserAgent الخاص بك. إذا كنت تبحث فقط لمعرفة libwww كنت أقترح استخدام موقع مختلف كما هدف وأنا متأكد من يوتيوب لديها كل نوع من تصلب المضادة للبرمجة.

نصائح أخرى

هل تستخدم يوتيوب مستقرة موثقة API ؟

استخدم وكيل HTTP مثل يبسكاراب لمشاهدة تدفق البيانات.

واقتراح تري لاستخدام شخص حزمة CPAN آخر لميكانيكا هو فكرة جيدة للغاية.

وحق الحق وكبيرة، ما تريد القيام به هو تحديد cookiejar لمعظم هذه المواقع التي لديها تسجيل الدخول إعادة توجيه. هذا هو ما فعلته الحزمة. أيضا حزمة الإيقاعات الكثير من عمليات البحث والورطات على أساس المواصفات يوتيوب.

وسوف محتوى أياكس على سبيل المثال أن تكون تقريبية منذ ليست هناك عندما كشط بك

وأنت فقط اختار صفحة الخام إلى حد ما تبدأ مع.

واستمتع

في الحقيقة أنا أعمل على هذه المسألة نفسي.قبل أن أقترح قراءة أكثر من هذا API دليل من جوجل منذ المرجعية.إذا أنا قراءته بشكل صحيح ، واحد يبدأ مع تمرير بيانات اعتماد المستخدم من خلال بقية واجهة للحصول على التوثيق المميز.إلى التعامل مع هذا, أنا باستخدام التالية:

sub getToken {
  my %parms = @_;
  my $response    = LWP::UserAgent->new->post(
                   'https://www.google.com/youtube/accounts/ClientLogin',
                   [
                         Email   => $parms{'username'},
                         Passwd  => $parms{'password'},
                         service => "youtube",
                         source  => "<<Your Value Here>>",                            
                   ]
    );


    my $content = $response->content;


    my ($auth) = $content =~ /^Auth=(.*)YouTubeUser(.*)$/msg
           or die "Unable to authenticate?\n";
    my ($user) = $content =~ /YouTubeUser=(.*)$/msg
            or die "Could not extract user name from response string. ";

    return ($auth, $user);
}

و أدعو أن من الجزء الرئيسي من البرنامج على هذا النحو:

## Get $AuthToken
my ($AuthToken, $GoogleUserName) = getToken((
                          username => $email, password => $password
                          ));

مرة واحدة لدي هذين الأمرين -- $AuthToken دولار GoogleUserName مازلت اختبار LWP بعد.ما زلت أكتب هذه الوحدة:

sub test {

my %parms = @_;

## Copy file contents. Use, foy's three param open method. 
my $fileSize = -s $parms{'File'};
open(VideoFile, '<', "$parms{'File'}") or die "Can't open $parms{'File'}.";
binmode VideoFile;
read(VideoFile, my $fileContents, $fileSize) or die "Can't read $parms{'File'}";
close VideoFile;




my $r = LWP::UserAgent->new->post(
    "http://uploads.gdata.youtube.com/feeds/api/users/$parms{'user'}/uploads",
    [
        Host              => "uploads.gdata.youtube.com",
        'Authorization'     => "AuthSub token=\"$parms{'auth'}\"",
        'GData-Version'     => "2",
        'X-GData-Key'       => "key=$YouTubeDeveloperKey",
        'Slug'              => "$parms{'File'}",
        'Content-Type'      => "multipart/related; boundary=\"<boundary_string>\"",
        'Content-Length'    => "<content_length>",
        'video_content_type'=> "video/wmv",
        'Connection'        => "close",
        'Content'           => $fileContents
    ]

);


print Dumper(\$r->content)
}

وهذا هو ما يسمى

&test((auth=>$Auth, user=>$user, File=>'test.wmv'));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top