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

Posted

技术标签:

【中文标题】如何通过 Twitter API https://api.twitter.com/1.1/direct_messages/events/new.json 发送新的直接消息?【英文标题】:How to send new direct message through Twitter API https://api.twitter.com/1.1/direct_messages/events/new.json? 【发布时间】:2018-11-14 23:44:39 【问题描述】:

我正在实施 Twitter 新的直接消息 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 => "value"

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

这是最常见的问题之一。

你可以这样做:

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

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

【讨论】:

Yes header 被添加到设置 Content-Type,但仍然面临同样的错误。 你如何发送这个?我会require 'json',然后说例如options=:event=> :type=>"message_create", :message_create=> :target=>:recipient_id=>"1234", :message_data=>:text=>"test",然后发送options.to_json。另外,根据文档Setting Content-Length may also be required if it is not automatically. 我正在通过 Twitter gem 实现它,并且更新其中的 Headers 也会引发另一个错误。【参考方案2】:

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 case TwitterAPIExchange , añade la propiedad

public $appjson;

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

$this->appjson=false;

zh 公共函数 performRequest($return = true, $curlOptions = array())

remplaza

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

推荐

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

para finalizar 美国:

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

【讨论】:

【参考方案3】:

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

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

但是在实际数据上仍然使用json.dumps(),请求随后与坏数据不一致,当我没有dumps'ing它发送数据时一切正常。

这可能无济于事,只是检查您的数据完整性。

【讨论】:

以上是关于如何通过 Twitter API https://api.twitter.com/1.1/direct_messages/events/new.json 发送新的直接消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Twitter API 找人?

如何通过 twitter 的 Fabric API (Android) 获取用户数据

Twitter API 申请key

如何通过经典 ASP 使用 Twitter 获取搜索/推文 api 1.1

如何通过iOS中的Twitter API获取用户电子邮件地址?

如何获取特定 Twitter 状态的图像 url - Twitter API