如何通过Twitter API发送新的直接消息https://api.twitter.com/1.1/direct_messages/events/new.json?

时间:2018-06-05 13:09:40

标签: ruby rest api twitter ruby-on-rails-5

我正在实施Twitter新的Direct消息API, 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"
          }
        }
      }
    }

Payload被转换为通常的Ruby散列,即:key => "值"

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

如何保留第三方API请求格式?

任何建议都会有很大的帮助。

由于

3 个答案:

答案 0 :(得分:0)

您是否尝试过设置Content-Type ('application/json')?发送前在您的内容标题中?

这是最常见的问题之一。

你可以通过做类似的事情来做到这一点:

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

它会强制您的应用在每个请求上附加Content-Type

答案 1 :(得分:0)

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

美国la clase TwitterAPIExchange 和其他应用。

您的购物习惯修改为:

la clase TwitterAPIExchange ,añadela propiedad

public $appjson;

en 公共功能__construct(array $ settings)的用法。

$this->appjson=false;

en 公共函数performRequest($ 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:');
}

最终封杀美国:

.....
$twitter = new TwitterAPIExchange($settings);
......
......
$twitter->appjson=true;
$twitter->buildOauth($url, $requestMethod)
->performRequest(true,
array( CURLOPT_POSTFIELDS => $params)
);

答案 2 :(得分:0)

我遇到了类似的错误,结果发现我发送请求的数据格式有点错误。我正在使用带有以下标头的python请求:

HEADERS = {
    'Content-type': 'application/json',
    'Accept': 'application/json'
}

但是仍然在实际数据上使用json.dumps(),该请求随后与错误数据不一致,当我只发送没有dumps'ing的数据时,请求全部正常。

这可能并没有真正的帮助,只是检查您的数据完整性。