如何通过 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 的 Fabric API (Android) 获取用户数据
如何通过经典 ASP 使用 Twitter 获取搜索/推文 api 1.1