httpコンポーネントのみを使用してInstagramの「フォロー」リストを取得しようとしています。使用しようとしましlHTTP.Get('https://www.instagram.com/Myusername/following/');
たが、復号化されたhtmlにユーザー名がありません。しかし、私は何人かの人がインスタグラムAPIなしでそれを使用しているのを見ました。VB.Netのhttp応答だけです。Delphi10を使用しています。
更新
procedure TForm1.Button4Click(Sender: TObject);
var
lHTTP: TIdHTTP;
IdSSL: TIdSSLIOHandlerSocketOpenSSL;
Params, login : TStrings;
Reply, Token, X: string;
Cookie: TIdCookie;
begin
try
Params := TStringList.Create;
Params.Add('username=' + Edit1.Text);
Params.Add('password=' + Edit2.Text);
lHTTP := TIdHTTP.Create(nil);
try
IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
IdSSL.SSLOptions.Method := sslvTLSv1;
IdSSL.SSLOptions.Mode := sslmClient;
lHTTP.IOHandler := IdSSL;
lHTTP.ReadTimeout := 30000;
lHTTP.HandleRedirects := True;
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
lHTTP.Get('https://www.instagram.com', TStream(nil));
Cookie := lHTTP.CookieManager.CookieCollection.Cookie['csrftoken', 'www.instagram.com'];
if Cookie <> nil then
Token := Cookie.Value;
try
lHTTP.Request.CustomHeaders.Values['X-CSRFToken'] := Token;
lHTTP.Request.CustomHeaders.Values['X-Instagram-AJAX'] := '1';
lHTTP.Request.CustomHeaders.Values['X-Requested-With'] := 'XMLHttpRequest';
lHTTP.Request.Referer := 'https://www.instagram.com/';
lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
Reply := lHTTP.Post('https://www.instagram.com/accounts/login/ajax/', Params);
finally
end;
finally
end;
Finally
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
lHTTP.Get('https://www.instagram.com/myusername/following/', TStream(nil));
Memo1.Lines.Add(Reply);
Finally
end;
end;
end;
この行:
lHTTP.Get('https://www.instagram.com/myusername/following/', TStream(nil));
Get()
応答の本文(AResponseContent=nil
)を無視するように指示しているのに、Reply
変数に新しい応答を割り当てていないためReply
、以前のログイン応答の古い値が表示されています。
/following
ページのHTMLを取得するには、代わりにこれを使用してください
Reply := lHTTP.Get('https://www.instagram.com/myusername/following/');
ただし、Webブラウザが行う実際のHTTPリクエストを見るとFollowing
、プロファイルページのリンクをクリックすると、実際POST
には次のURLにAJAXリクエストが送信され、フォロワーをリストしたJSONドキュメントが受信されます。
https://www.instagram.com/query/
POST
本文にクエリ文字列が含まれています。そのAJAXリクエストを複製する必要があります。例:
var
//...
userid: string; // <-- add this
begin
// after your AJAX login...
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
lHTTP.Request.Connection := 'keep-alive';
lHTTP.Get('https://www.instagram.com/myusername/', TStream(nil));
cookie := lHTTP.CookieManager.CookieCollection.Cookie['csrftoken', 'www.instagram.com'];
if cookie <> nil then
token := cookie.Value
else
token := '';
cookie := lHTTP.CookieManager.CookieCollection.Cookie['ds_user_id', 'www.instagram.com'];
if cookie <> nil then
userid := cookie.Value; // <-- add this
Params.Clear;
Params.Add('q=ig_user(' + userid + ') {'+LF+
' follows.first(10) {'+LF+
' count,'+LF+
' page_info {'+LF+
' end_cursor,'+LF+
' has_next_page'+LF+
' },'+LF+
' nodes {'+LF+
' id,'+LF+
' is_verified,'+LF+
' followed_by_viewer,'+LF+
' requested_by_viewer,'+LF+
' full_name,'+LF+
' profile_pic_url,'+LF+
' username'+LF+
' }'+LF+
' }'+LF+
'}'+LF);
Params.Add('ref=relationships::follow_list');
lHTTP.Request.CustomHeaders.Values['X-CSRFToken'] := token;
lHTTP.Request.CustomHeaders.Values['X-Instagram-AJAX'] := '1';
lHTTP.Request.CustomHeaders.Values['X-Requested-With'] := 'XMLHttpRequest';
lHTTP.Request.Referer := 'https://www.instagram.com/myusername/';
lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
Reply := lHTTP.Post('https://www.instagram.com/query/', Params);
// process Reply as needed ...
これReply
で、リストの最初の10人のフォロワーを含むJSONを受け取るはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加