Ce référentiel contient mes notes et découvertes lors de l'application de threads d'inscription rétro-ingénierie. N'hésitez pas à faire des relations publiques si vous avez trouvé quelque chose de nouveau ou à créer des clients avec ces informations (avec Credit OFC).
La version Web des threads est actuellement en lecture seule, donc peu de choses peuvent être apprises sur l'authentification ou la publication. Il utilise le client GraphQL de relais de META pour parler au backend ( threads.net/api/graphql ), qui semble être configuré pour interdire les requêtes arbitraires. Cela nous laisse limités aux requêtes existantes trouvées dans la source du frontend:
Remarque Lors de l'interrogation du backend GraphQL, assurez-vous de définir un agent utilisateur (semble que tout fonctionne ici) et définissez l'en-tête
x-ig-app-idvers238260118697367.
Doc ID:
23996318473300828Variables:
userID(l'ID de l'utilisateur)
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:
6232751443445612Variables:
userID(l'ID de l'utilisateur)
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:
6307072669391286Variables:
userID(l'ID de l'utilisateur)
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:
5587632691339264Variables:
postID(ID du post)
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:
9360915773983802Variables:
mediaID(l'ID du post)
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=9360915773983802Avertissement Ce point de terminaison ne fonctionne actuellement que pour les comptes sans 2FA activés.
Les applications mobiles utilisent le framework Bloks de META (conçu à l'origine pour Instagram Lite) pour l'authentification.
L'ID de versioning Bloks pour les threads est 00ba6fa565c3c707243ad976fa30a071a625f2a3d158d9412091176fe35027d8 . Les Bloks vous obligent également à fournir un ID de périphérique (de forme ios-RANDOM | android-RANDOM , RANDOM étant un ensemble aléatoire de 13 caractères).
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 ' Cette demande renvoie une grande charge utile JSON. Votre jeton sera immédiatement après le Bearer IGT:2: et devrait comporter 160 caractères.
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"}} ' Les threads utilisent le même système d'ID utilisé par Instagram. La meilleure approche pour se convertir à partir du nom d'utilisateur en ID semble demander à la page Instagram de l'utilisateur ( instagram.com/:username ) et analyser manuellement la réponse HTML. Pour d'autres méthodes, consultez cette question StackOverflow.