Delphi10のhttpコンポーネントを使用してInstagramのフォローリストを取得する方法

ColdZer0

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]

編集
0

コメントを追加

0

関連記事

分類Dev

Delphi Indy HTTP コンポーネントを使用してフォーム データを含むファイルをアップロードする

分類Dev

独自のスプラッシュスクリーンDelphi10シアトルを作成する

分類Dev

戻り値の型をフローを使用したReactコンポーネントのリストとして指定する方法

分類Dev

ネストされたコンポーネントを使用してAngularフォームを送信する方法

分類Dev

vue子コンポーネントで$ refを使用してフォーカスをシフトする方法は?

分類Dev

Delphiを使用してvirtualtreeコンポーネントのファイルに保存/ファイルからロードする方法は?

分類Dev

複数のコンポーネントを使用してデータをフィルタリングする方法

分類Dev

Reactのフォームをコンポーネントとして使用する方法

分類Dev

スマートコンポーネント内で2つの引数を使用するメソッドを使用して、スマート/ダムコンポーネントのコンポーネントをリファクタリングする

分類Dev

VueXストアからコンポーネント内のフォームをトリガーする方法

分類Dev

Reactフックを使用した最初のレンダリングで小道具を使用して子コンポーネントをロードする方法

分類Dev

テーマを使用してreact-selectコンポーネントのフォントを変更する

分類Dev

Delphi TokyoでSetPropValue()とRTTIを使用してコンポーネントのプロパティを変更する

分類Dev

Reactの親コンポーネントのボタンを使用してフォームを送信する

分類Dev

正確な座標を取得するために背景ルーラー/グラフでリッチフェイスを使用してコンポーネントのドラッグアンドドロップを実装する方法

分類Dev

PythonでInstagramのフォロワーリストを取得する

分類Dev

選択したコンポーネントで選択した値を取得して、Vueを使用して別のコンポーネントで使用する方法

分類Dev

多くのカスタムコンポーネントを使用して複雑なフォームを作成する方法を教えてください。

分類Dev

delphiのコンポーネントのカスタムコンポーネントエディタフォームを適切に呼び出す方法

分類Dev

delphiのコンポーネントのカスタムコンポーネントエディタフォームを適切に呼び出す方法

分類Dev

2つのコンポーネントを使用して検索でフィルタリングする方法[reactjs]

分類Dev

パネルコントロールを使用してドロップダウンリスト値関連のフォームを取得していません

分類Dev

デフォルトのGroovyインポートのコードリストを取得する方法

分類Dev

フォームコントロールとしてAngularコンポーネントを使用する

分類Dev

ネストされたフォームグループのコントロールを角度で取得する方法

分類Dev

ネストされたフォームグループのコントロールを角度で取得する方法

分類Dev

Bluetoothコンポーネントを使用してAndroidフォンからシリアルデバイスにデータを転送する際の問題

分類Dev

ループを使用して100以上のWindowsフォームコンポーネントを作成する

分類Dev

メインフレームを使用して他のコンポーネントを取得するJavaSwing

Related 関連記事

  1. 1

    Delphi Indy HTTP コンポーネントを使用してフォーム データを含むファイルをアップロードする

  2. 2

    独自のスプラッシュスクリーンDelphi10シアトルを作成する

  3. 3

    戻り値の型をフローを使用したReactコンポーネントのリストとして指定する方法

  4. 4

    ネストされたコンポーネントを使用してAngularフォームを送信する方法

  5. 5

    vue子コンポーネントで$ refを使用してフォーカスをシフトする方法は?

  6. 6

    Delphiを使用してvirtualtreeコンポーネントのファイルに保存/ファイルからロードする方法は?

  7. 7

    複数のコンポーネントを使用してデータをフィルタリングする方法

  8. 8

    Reactのフォームをコンポーネントとして使用する方法

  9. 9

    スマートコンポーネント内で2つの引数を使用するメソッドを使用して、スマート/ダムコンポーネントのコンポーネントをリファクタリングする

  10. 10

    VueXストアからコンポーネント内のフォームをトリガーする方法

  11. 11

    Reactフックを使用した最初のレンダリングで小道具を使用して子コンポーネントをロードする方法

  12. 12

    テーマを使用してreact-selectコンポーネントのフォントを変更する

  13. 13

    Delphi TokyoでSetPropValue()とRTTIを使用してコンポーネントのプロパティを変更する

  14. 14

    Reactの親コンポーネントのボタンを使用してフォームを送信する

  15. 15

    正確な座標を取得するために背景ルーラー/グラフでリッチフェイスを使用してコンポーネントのドラッグアンドドロップを実装する方法

  16. 16

    PythonでInstagramのフォロワーリストを取得する

  17. 17

    選択したコンポーネントで選択した値を取得して、Vueを使用して別のコンポーネントで使用する方法

  18. 18

    多くのカスタムコンポーネントを使用して複雑なフォームを作成する方法を教えてください。

  19. 19

    delphiのコンポーネントのカスタムコンポーネントエディタフォームを適切に呼び出す方法

  20. 20

    delphiのコンポーネントのカスタムコンポーネントエディタフォームを適切に呼び出す方法

  21. 21

    2つのコンポーネントを使用して検索でフィルタリングする方法[reactjs]

  22. 22

    パネルコントロールを使用してドロップダウンリスト値関連のフォームを取得していません

  23. 23

    デフォルトのGroovyインポートのコードリストを取得する方法

  24. 24

    フォームコントロールとしてAngularコンポーネントを使用する

  25. 25

    ネストされたフォームグループのコントロールを角度で取得する方法

  26. 26

    ネストされたフォームグループのコントロールを角度で取得する方法

  27. 27

    Bluetoothコンポーネントを使用してAndroidフォンからシリアルデバイスにデータを転送する際の問題

  28. 28

    ループを使用して100以上のWindowsフォームコンポーネントを作成する

  29. 29

    メインフレームを使用して他のコンポーネントを取得するJavaSwing

ホットタグ

アーカイブ