Как отправить новое прямое сообщение через Twitter API https://api.twitter.com/1.1/direct_messages/events/new.json? - PullRequest
0 голосов
/ 05 июня 2018

Я реализую новый API-интерфейс Twitter для прямого сообщения, https://api.twitter.com/1.1/direct_messages/events/new.json

Я столкнулся с ошибкой, 415 Неподдерживаемый тип носителя

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

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

Я передаю полезную нагрузку как,

options = {
      "event": {
        "type": "message_create",
        "message_create": {
          "target": {
            "recipient_id": "1234"
          },
          "message_data": {
            "text": "test"
          }
        }
      }
    }

Полезная нагрузка преобразуется в обычный хэш Ruby, т. Е. Key => "value"

{:event=>
  {:type=>"message_create",
   :message_create=>
    {:target=>{:recipient_id=>"1234"},
     :message_data=>{:text=>"test"}}}}

Как сохранить формат запроса API стороннего производителя?

Любое предложение поможет вам..

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

https://github.com/J7mbo/twitter-api-php/blob/master/TwitterAPIExchange.php

usa la clase TwitterAPIExchange y aplica estos cambios.

Yo lo solucione modificando la clase así:

a la clase TwitterAPIExchange , añade la propiedad

public $appjson;

ru public function __construct (array $ settings) añade la inicialización.

$this->appjson=false;

en publicфункция executeRequest ($ return = true, $ curlOptions = array ())

remplaza

$header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:');

por

if ($this->appjson) {
$header = array('Content-Type: application/json',$this->buildAuthorizationHeader($this->oauth), 'Expect:');
} else {
$header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:');
}

para finalizar usa:

.....
$twitter = new TwitterAPIExchange($settings);
......
......
$twitter->appjson=true;
$twitter->buildOauth($url, $requestMethod)
->performRequest(true,
array( CURLOPT_POSTFIELDS => $params)
);
0 голосов
/ 05 июня 2018

Вы пробовали установить Content-Type ('application/json')?в заголовке вашего контента перед отправкой?

Это одна из самых распространенных проблем.

Вы можете сделать это, выполнив что-то похожее на:

before_filter :set_content_type
  def set_content_type
    @headers["Content-Type"] = "application/json; charset=utf-8"
  end

Это заставит ваше приложение добавлять Content-Type к каждому запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...