[英]twilio export message logs to csv via python
我正在嘗試使用 python 從 twilio 檢索一個月的消息日志。 下面的代碼在檢索一兩天時工作正常,但在擴展日期范圍時非常慢。 有一個更好的方法嗎?
import pandas as pd
from datetime import date
from twilio.rest import Client
# Your Account Sid and Auth Token from twilio.com/user/account
account_sid = "####"
auth_token = "####"
client = Client(account_sid, auth_token)
messages = client.messages.list(
date_sent_after=date(2017, 3, 1),
date_sent_before=date(2017, 3, 2)
)
d = []
for message in messages:
d.append((message.from_, message.to, message.body, message.status,
message.date_sent, message.price))
print(d)
df = pd.DataFrame(d, columns=('From', 'To', 'Body', 'Status', 'Sent Date', 'Price'))
print(df.dtypes)
df.to_csv('export.csv', index=False, encoding='utf-8')
Twilio 在其日志頁面上的“導出到 CSV”選項根本無法導出成百上千的結果。 為此,您需要自己的腳本來對來自 Twilio 的 API 的結果進行分頁並生成一個 CSV。
我建議這樣做:
import csv
import requests
account_sid = ""
auth_pass = ""
results_per_page = 1000
num_pages = 500
start_date = "2010-04-01"
base_url = "https://api.twilio.com"
initial_page = "/" + start_date + "/Accounts/" + account_sid + "/Messages.json?PageSize=" + str(results_per_page)
response = requests.get(base_url + initial_page, auth=(account_sid, auth_pass)).json()
next_page = response['next_page_uri']
page = 0
data = response['messages']
# print response['previous_page_uri']
# print response
if not next_page == None:
while page < num_pages:
response = requests.get(base_url + next_page, auth=(account_sid, auth_pass)).json()
next_page = response['next_page_uri']
print "On page: " + str(page)
data = data + response['messages']
page += 1
if next_page == None:
print "No more pages"
break
csv_file = open('export.csv', 'w')
csvwriter = csv.writer(csv_file)
count = 0
for message in data:
if count == 0:
header = message.keys()
csvwriter.writerow(header)
count += 1
#only include outbound sms because inbound ascii/emojis throws csv writer errors
if message.values()[2] == "outbound-api":
csvwriter.writerow(message.values())
csv_file.close()
print "Done!"
您需要使用您的憑據輸入 account_sid 和 auth_pass。 如果不確定這些是什么,請檢查 Twilio API Explorer。 創建一個包含此代碼的 twilio.py 文件,然后在 mac 終端中運行腳本:python twilio.py
我遇到的一個已知問題:如果入站消息包含表情符號或奇怪的字符,則 csv 寫入會引發錯誤。 通過過濾以僅寫入出站消息來修復此問題。
如果您想為其他人改進此腳本,請訪問 github 頁面的鏈接: https : //github.com/benjitastic/twilio-export-messages
Twilio 開發人員布道者在這里。
我這里有一個小技巧給你。 您實際上可以直接從 Twilio 獲取 CSV 。 您需要做的就是為您的數據構建 URL,然后在末尾添加.csv
。
編輯
要為您的消息構建 URL,您應該查看Messages 資源。
該列表位於 URL:
https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages
並將其轉換為 CSV,只需添加.csv
https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.csv
您需要使用您的帳戶 SID 和身份驗證令牌請求 URL 作為身份驗證,您也可以將任何查詢參數添加到您喜歡的 URL 末尾。
要執行日期范圍,例如 01/03/2017 之后和 02/03/2017 之前的示例,您的 URL 將如下所示:
https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.csv?DateSent>=2017-03-01&DateSent<=2017-03-02
查看使用 curl 列出消息的示例以更詳細地了解這一點。
如果您來這里是想了解如何提取通話記錄(而不是消息記錄),這里有一個示例。 您會注意到這與上面的答案非常接近(並且實際上是從它們派生出來的)。
import csv, json
import requests
account_sid = ''
auth_token = ''
results_per_page = 1000
num_pages = 1000
start_date = '2010-04-01'
base_url = 'https://api.twilio.com'
initial_page = '/' + start_date + '/Accounts/' + account_sid + '/Calls.json?PageSize=' + str(results_per_page)
response = requests.get(base_url + initial_page, auth=(account_sid, auth_token)).json()
next_page = response['next_page_uri']
page = 0
data = response['calls']
# print response['previous_page_uri']
# print response
while page < num_pages and next_page is not None:
print('On page: ' + str(page))
response = requests.get(base_url + next_page, auth=(account_sid, auth_token)).json()
next_page = response['next_page_uri']
data = data + response['calls']
page += 1
csv_file = open('twilio-call-logs.csv', 'w')
csvwriter = csv.writer(csv_file)
count = 0
for message in data:
if count == 0:
header = message.keys()
csvwriter.writerow(header)
count += 1
csvwriter.writerow(message.values())
csv_file.close()
print('Done!')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.