Загрузка медиафайлов из Twilio на Python

Я пытаюсь загрузить все медиафайлы, которые отправляются в мою учетную запись Twilio, и не могу понять, как получить доступ к фактическим изображениям.

from twilio.rest import Client
import requests
from operator import itemgetter
import json

ACCOUNT_SID = "xxxxxxx"
AUTH_TOKEN = "xxxxxxxx"

client = Client(ACCOUNT_SID, AUTH_TOKEN)


# builds a list of messages and media uris
messages = client.messages.list(from_="+19999999999")
msgs = []
for m in messages:
    line = [m.from_, m.to, m.body, m.sid, m.subresource_uris['media']]
    line = [str(x) for x in line]
    msgs.append(line)

# with list of all messages:
msgs = sorted(msgs, key=itemgetter(0))
for m in msgs:
    # get media list for each message that has one, else catch exception
    try:
        medias = client.messages(m[3]).media.list()
        # returns Twilio.Api.V2010.MediaInstance and i'm stuck
        for med in medias:
            print client.messages(m[3]).media(med.sid).fetch()
    except Exception as e:
        pass

Я просто заблудился и не могу найти в документации конкретных примеров. Я действительно не могу даже сказать, близок ли я или нет. Заранее спасибо!

РЕШЕНИЕ Благодаря philnash из twilio.rest import Клиент импортирует запросы на импорт json

# Find these values at https://twilio.com/user/account
ACCOUNT_SID = "xxxxx"
AUTH_TOKEN = "xxxxxx"
BASE_URL = "https://%s:%[email protected]" % (ACCOUNT_SID, AUTH_TOKEN)

client = Client(ACCOUNT_SID, AUTH_TOKEN)


# with list of all messages:
messages = client.messages.list(from_="+1999999999")
for m in messages:
    sid = m.sid
    # get media list for each message that has one, else catch exception
    try:
        message = client.messages(sid).fetch()
        print message.body
        medias = message.media.list()
        # returns Twilio.Api.V2010.MediaInstance and i'm stuck
        for media in medias:
            media_instance = client.messages(sid).media(media.sid).fetch()
            uri = requests.get(BASE_URL + media_instance.uri).json()
            uri2 = requests.get(BASE_URL + uri['uri'].replace('.json', ''))
            with open(media_instance.uri.split("/")[-1].replace(".json", ".png"), "wb") as f:
                f.write(uri2.content)
                f.close()
    except Exception as e:
        print e

person Mark    schedule 26.04.2017    source источник
comment
Какую ошибку вы получаете из этого кода?   -  person philnash    schedule 27.04.2017
comment
В том-то и дело. Я не получаю сообщения об ошибке, я просто продолжаю попадать в этот цикл URI и никогда не добираюсь до места, где можно скачать фотографию. Ошибок нет, просто сбивает с толку.   -  person Mark    schedule 27.04.2017
comment
Приведенный выше код возвращает набор объектов MediaInstance: ‹Twilio.Api.V2010.MediaInstance message_sid = MMxxxxxxx sid = MExxxxxxx account_sid = ACxxxxxxxx›   -  person Mark    schedule 27.04.2017
comment
У этих объектов есть uri, и когда я его называю, я получаю `` {u'parent_sid ': u'MMxxxxx', u'date_updated ': u'Wed, 26 апреля 2017 г. 21:20:30 +0000', u'uri ' : u '/ 2010-04-01 / Accounts / ACdxxxxx / Messages / MMxxxxx / Media / MExxxxx.json', u'account_sid ': u'ACxxxxx4', u'content_type ': u'image / jpeg', u'sid ': u'MExxxxx4', u'date_created ': u'Ср, 26 апреля 2017 г., 21:20:30 +0000'} `   -  person Mark    schedule 27.04.2017


Ответы (1)


Проповедник разработчиков Twilio здесь.

Когда вы получаете Media URI из вспомогательной библиотеки, это json-представление ресурса, оканчивающееся на .json. Чтобы получить необработанный ресурс, вам нужно только удалить расширение .json. Вы можете использовать этот URL-адрес для загрузки изображения.

person philnash    schedule 27.04.2017
comment
Вы помещаете ангела в евангелиста! Большое спасибо; именно решение! - person Mark; 27.04.2017
comment
@philnash У меня это не работает. Я использую MediaUrl без расширения, и он продолжает отправлять мне xml. Никогда не могу добраться до реального изображения. - person PatMcClellan__c; 27.11.2018
comment
Не уверен, что у вас происходит, но, возможно, проверьте это сообщение в блоге, чтобы получить более подробную информацию, чем я в этом ответе: twilio.com/blog/2018/05/ - person philnash; 27.11.2018