2013-10-01 1 views
1

Я пользуюсь службой под названием Mixcloud, чтобы попытаться загрузить несколько подкастов, таких как mp3-файлы. Я слежу за документацией Mixclouds о том, как я должен загружать песню через почтовый запрос, используя их api, однако я получаю некоторую ошибку.Использование запросов на отправку запроса POST в Mixcloud

Скажем, отправить запрос multipart/form-data POST со всеми данными, требуемыми в одном запросе на один пост. На основании того, что они сказали, что здесь код Python, я пришел с использованием requests для POST с:

accessToken = '**Censored**' 
postUrl = 'https://api.mixcloud.com/upload/?access_token=' + accessToken 
#postUrl = 'http://requestb.in/wqqj8lwq' ---> For testing what POST request sends. 

files = {'mp3': open('/home/jhvisser/Music/driveAt5_'+now.strftime("%y%m%d")+'.mp3', 'rb'), 
    'name': 'z103.5 Drive at 5 Streetmix - '+now.strftime("%Y%m%d"), 
    'tags-0-tag': 'remix', 
    'tags-1-tag': 'radio', 
    'tags-2-tag': 'hits', 
    'description': 'Daily weekday uploads of the latest drive at 5 music hits' 
} 

r = requests.post(postUrl,files=files) 

Я получаю JSON назад в ответ на сообщение:

{ 
    "details": { 
     "name": [ 
      "This field is required." 
     ] 
    }, 
    "error": { 
     "message": "Some posted data was invalid", 
     "type": "PostValidationError" 
    } 
} 

у меня нет понять, почему он говорит, что мне не хватает поля имени. У меня есть поле имени. Возможно, что другие поля могут также давать ошибки, за исключением того, что я не уверен, что приложение Mixcloud просто прекращает проверку при ошибке или нет.

Я также сделал запрос POST на номер RequestBin, чтобы вы могли посмотреть, что именно отправляется по этому запросу. Я буду включать ссылку ниже для Pastebin страницы requestbin, как я считаю, что ссылки истекает RequestBin

PasteBin Mirror

Ради сравнения вот что их пример на странице API показывает делать, если с помощью CURL:

curl -F [email protected] \ 
    -F "name=API Upload" \ 
    -F "tags-0-tag=Test" \ 
    -F "tags-1-tag=API" \ 
    -F "sections-0-chapter=Introduction" \ 
    -F "sections-0-start_time=0" \ 
    -F "sections-1-artist=Artist Name" \ 
    -F "sections-1-song=Song Title" \ 
    -F "sections-1-start_time=10" \ 
    -F "percentage_music=75" \ 
    -F "description=My test cloudcast" \ 
    https://api.mixcloud.com/upload/?access_token=INSERT_ACCESS_TOKEN_HERE 

ответ

1

Согласно doc и ошибки вы получаете, вы должны дать имя

имя ТРЕБУЕТСЯ. Имя облачного облака - это будет использоваться для создания URL-адреса, следует избегать дублирования имен, но не приведет к сбою загрузки.

Update

, как указано в комментариях, посылая следующие значения с помощью опциональных данных параметров загружает файл

data={ 
    'name': 'z103.5 Drive at 5 Streetmix - '+now.strftime("%Y%m%d"), 
    'tags-0-tag': 'remix', 
    'tags-1-tag': 'radio', 
    'tags-2-tag': 'hits', 
    'description': 'Daily weekday uploads of the latest drive at 5 music hits' 
} 
r = requests.post(postUrl,files=files,data=data) 
+0

Если вы посмотрите на моем коде у меня есть имя поле. – ComputerLocus

+0

Возможно, я ошибаюсь, но, возможно, имя должно быть в параметре данных, установленном для файлов. я думаю, ошибка, которую вы получаете из api, должна означать, что каким-то образом она не может найти имя, которое вы отправляете. –

+0

Я думаю, что параметр files должен иметь только файл, а функция 'request.post' имеет необязательный параметр' data'. –