使用 Python 透過 GraphQL API 發布 Threads 串文

建立應用程式

首先,前往 Meta 開發者平台,建立一個應用程式。例如:

  • 應用程式名稱:post-bot
  • 新增使用案例:「存取 Threads API」
  • 商家:「我還不想連結商家資產管理組合」

完成後,點選「建立應用程式」按鈕。

新增測試人員

點選「應用程式角色」頁籤,點選「新增用戶」,點選「Threads 測試人員」,輸入自己的 Threads 帳號用戶名稱,最後點選「新增」。

設定 Threads 存取權限

進到 Threads 平台,點選「設定」,點選「帳號」,點選「網站權限」,點選「邀請」,接受來自應用程式 post-bot 的存取請求。

測試

回到 Meta 開發者平台,點選「測試」頁籤,點選「開啟 GraphQL API 測試工具」按鈕。

將 Meta 應用程式指定為 post-bot,點選「Generate Threads Access Token」按鈕,即可取得一個暫時性的存取令牌。

點選提交,響應如下:

1
2
3
4
{
"id": "29361808173406421",
"name": "Memo Chou"
}

實作

取得使用者資訊

使用 GraphQL API 測試工具,設定請求參數:

  • HTTP Method:GET
  • API Endpoint:graph.threads.net/v1.0/me?fields=id,name

提交後,響應如下:

1
2
3
4
{
"id": "29361808173406421",
"name": "Memo Chou"
}

使用 cURL 測試:

1
2
curl -i -X GET \
"https://graph.threads.net/v1.0/me?fields=id%2Cname&access_token=your-access-token"

使用 Python 腳本測試:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import http.client
import urllib.parse

host = "graph.threads.net"
endpoint = "/v1.0/me"
params = {
"fields": "id,name",
"access_token": "your-access-token"
}

url = f"{"/v1.0/me"}?{urllib.parse.urlencode(params)}"

conn = http.client.HTTPSConnection("graph.threads.net")
conn.request("GET", url)

response = conn.getresponse()

body = response.read().decode()
print(body)

conn.close()

建立貼文草稿

使用 GraphQL API 測試工具,設定請求參數:

  • HTTP Method:POST
  • API Endpoint:graph.threads.net/v1.0/me/threads

設定請求內容:

1
2
3
4
{
"media_type": "TEXT",
"text": "Hello"
}

提交後,響應如下:

1
2
3
{
"id": "18050739080235480"
}

使用 cURL 測試:

1
2
curl -i -X POST \
"https://graph.threads.net/v1.0/me/threads?media_type=TEXT&text=Hello&access_token=your-access-token"

使用 Python 腳本測試:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import http.client
import json

host = "graph.threads.net"
endpoint = "/v1.0/me/threads"
headers = {"Content-Type": "application/json"}

payload = {
"media_type": "TEXT",
"text": "Hello",
"access_token": "your-access-token"
}

conn = http.client.HTTPSConnection(host)
conn.request("POST", endpoint, body=json.dumps(payload), headers=headers)

response = conn.getresponse()
body = response.read().decode()
print(body)

conn.close()

發布貼文

使用 GraphQL API 測試工具,設定請求參數:

  • HTTP Method:POST
  • API Endpoint:graph.threads.net/v1.0/me/threads_publish

設定請求內容:

1
2
3
{
"creation_id": "18050739080235480"
}

提交後,響應如下:

1
2
3
{
"id": "18286053724221534"
}

使用 cURL 測試:

1
2
curl -i -X POST \
"https://graph.threads.net/v1.0/me/threads_publish?creation_id=18051387608469145&access_token=your-access-token"

使用 Python 腳本測試:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import http.client
import json

host = "graph.threads.net"
endpoint = "/v1.0/me/threads_publish"
headers = {"Content-Type": "application/json"}

payload = {
"creation_id": "your-creation-id",
"access_token": "your-access-token"
}

conn = http.client.HTTPSConnection(host)
conn.request("POST", endpoint, body=json.dumps(payload), headers=headers)

response = conn.getresponse()
body = response.read().decode()
print(body)

conn.close()

參考資料