Twilio REST API
REST APIをcurlで実行。
curl -G https://api.twilio.com/2010-04-01/Accounts/[account_sid /Calls.csv?PageSize=1000&StartTime=2018-05-10 \
-u 'account_sid:auth_token'
REST APIをPythonで実行。
import urllib.request
import datetime
yesterday = datetime.date.today() - datetime.timedelta(days=1)
target_date = yesterday.strftime('%Y-%m-%d')
account_sid = 'account_sid'
auth_token = 'auth_token'
url = "https://api.twilio.com/2010-04-01/Accounts" \
+ "/" + account_sid \
+ "/Calls.csv?PageSize=1000&StartTime=" \
+ target_date
# Basic認証
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
top_level_url = "https://api.twilio.com/2010-04-01/Accounts/"
password_mgr.add_password(None, top_level_url, account_sid, auth_token)
handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
opener = urllib.request.build_opener(handler)
# URLへ接続
with opener.open(url) as res:
html = res.read().decode("utf-8")
print(html)
Twilio Pythonモジュール
Twilio Pythonモジュールはインストールが必要。
pip install twilio
from twilio.rest import Client
import datetime
import traceback
try:
# クライアント準備
account_sid = 'account_sid'
auth_token = 'auth_token'
client = Client(account_sid, auth_token)
yesterday = datetime.date.today() - datetime.timedelta(days=1)
# 通話ログ取得
calls = client.calls.list(
start_time=yesterday
)
# ログ出力
for record in calls:
print(record.sid)
except:
traceback.print_exc()
RESTAPIと同様にCSV形式で取得したかったが、やり方が見つからず断念。
ちなみに、RESTAPIの場合は以下の記述がありサクッとできた。
出力形式についてのメモ: リソースURIに「.csv」の拡張子を追加すると、カンマ区切り値の形式でリソースを取得できます。 これは通話ログの取得に特に便利です。 以下をお試しください:
GET /2010-04-01/Accounts/AC5ef87.../Calls.csv
注意
ログが多い場合一度に取得できない。
PageSize=1000
を指定することで、一度に取得できる件数を1000件にできる。
デフォルトは50件。
1000件以上のログを1度で取得したい場合は工夫が必要になる。
ドキュメントだと以下の対応が必要とのこと
API が返す結果のページを複数取得する場合は、受け取った nextpageuri パラメーターを使って、次のページの結果を取得します。 すべての Twilio Helper ライブラリ は、nextpageuri を使ってページを移動します。
ただ、json取得だとページ情報が含まれていたが、CSV取得では見当たらなかった。
参考
https://jp.twilio.com/docs/usage/api
https://jp.twilio.com/docs/voice/tutorials/how-to-retrieve-call-logs-python
https://jp.twilio.com/docs/voice/api/call
https://jp.twilio.com/docs/libraries/python
https://docs.python.jp/3/howto/urllib2.html
https://jp.twilio.com/docs/voice/api/call#paging
https://jp.twilio.com/docs/usage/twilios-response#response-formats-list-paging-information