Dieses Repository enthält meine Notizen und Entdeckungen, während sie umgekehrt-Engineering-Threads-Apps. Fühlen Sie sich frei zu PR, wenn Sie etwas Neues gefunden haben, oder um Kunden mit dieser Informationen (mit Kredit OFC) aufzubauen.
Die Webversion von Threads ist derzeit nur schreibgeschützt, daher kann nicht viel über Authentifizierung oder Posting gelernt werden. Es verwendet den Relay GraphQL -Client von Meta, um mit dem Backend ( threads.net/api/graphql ) zu sprechen, der so konfiguriert zu sein scheint, dass es willkürliche Abfragen nicht zulässt. Dies lässt uns auf die vorhandenen Fragen in der Quelle des Frontends beschränkt:
Beachten Sie beim Abfragen des GraphQL-Backends, stellen Sie sicher, dass Sie einen Benutzer-Agent festlegen (scheinen hier etwas zu funktionieren) und den
x-ig-app-idHeader auf238260118697367festlegen.
DOC ID:
23996318473300828Variablen:
userID(die Benutzer -ID)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"userID":"314216"} '
--data doc_id=23996318473300828DOC ID:
6232751443445612Variablen:
userID(die Benutzer -ID)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"userID":"314216"} '
--data doc_id=6232751443445612DOC ID:
6307072669391286Variablen:
userID(die Benutzer -ID)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"userID":"314216"} '
--data doc_id=6307072669391286DOC ID:
5587632691339264Variablen:
postID(die ID des Posts)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"postID":"3138977881796614961"} '
--data doc_id=5587632691339264DOC ID:
9360915773983802Variablen:
mediaID(ID des Beitrags)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"mediaID":"3138977881796614961"} '
--data doc_id=9360915773983802Warnung dieser Endpunkt funktioniert derzeit nur für Konten ohne 2FA -aktivierter 2FA.
Die mobilen Apps verwenden das Bloks Framework von Meta (ursprünglich für Instagram Lite erstellt) zur Authentifizierung.
Die BLOKS -Versioning -ID für Threads ist 00ba6fa565c3c707243ad976fa30a071a625f2a3d158d9412091176fe35027d8 . Bloks erfordert außerdem, dass Sie eine Geräte-ID anbieten (von Form ios-RANDOM | android-RANDOM , der RANDOM ein zufälliger Satz von 13 Zeichen ist).
curl --request POST
--url ' https://i.instagram.com/api/v1/bloks/apps/com.bloks.www.bloks.caa.login.async.send_login_request/ '
--header ' user-agent: Barcelona 289.0.0.77.109 Android '
--header ' sec-fetch-site: same-origin '
--header ' content-type: application/x-www-form-urlencoded; charset=UTF-8 '
--data ' params={"client_input_params":{"password":"$PASSWORD","contact_point":"$USERNAME","device_id":"$DEVICE_ID"},"server_params":{"credential_type":"password","device_id":"$DEVICE_ID"}} '
--data ' bloks_versioning_id=00ba6fa565c3c707243ad976fa30a071a625f2a3d158d9412091176fe35027d8 ' Diese Anfrage gibt eine große JSON -Nutzlast zurück. Ihr Token findet unmittelbar nach dem Bearer IGT:2: und sollte 160 Zeichen lang sein.
curl --request POST
--url ' https://i.instagram.com/api/v1/media/configure_text_only_post/ '
--header ' content-type: application/x-www-form-urlencoded; charset=UTF-8 '
--header ' user-agent: Barcelona 289.0.0.77.109 Android '
--header ' authorization: Bearer IGT:2:$TOKEN '
--header ' sec-fetch-site: same-origin '
--data ' signed_body=SIGNATURE.{"publish_mode":"text_post","text_post_app_info":"{"reply_control":0}","timezone_offset":"0","source_type":"4","_uid":"$USER_ID","device_id":"$DEVICE_ID","caption":"$POST_TEXT","device":{"manufacturer":"OnePlus","model":"ONEPLUS+A3003","android_version":26,"android_release":"8.1.0"}} ' Threads verwendet das gleiche ID -System, das von Instagram verwendet wird. Der beste Ansatz für die Konvertiten von Benutzername in ID scheint die Instagram -Seite des Benutzers ( instagram.com/:username ) zu fordern und die Antwort html manuell zu analysieren. Weitere Methoden finden Sie in dieser Frage der Stackoverflow.