LoginSignup
2
1

More than 5 years have passed since last update.

Twilio通話ログ取得

Last updated at Posted at 2018-05-13

Twilio REST API

REST APIをcurlで実行。

Twilio_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で実行。

Twilio_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モジュールはインストールが必要。

Twilio_Pythonモジュールインストール
pip install twilio
Twilio_Pythonモジュール
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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1