这是一个非常简单的示例,即调用Twitter的搜索API,以便从已知有推文的标签#fml中获取所有推文。
我相信我正确使用了此处所述的仅应用程序身份验证:https://dev.twitter.com/docs/auth/application-only-auth(有关通话的示例,请参阅步骤3)
我被要求提供一个不涉及任何服务器端代码的解决方案,所以我在javascript中包含了承载代码,这不好开头,但是......
我希望这段代码能够正常运行。相反,它产生错误'400(错误请求)'。有什么想法吗?
$.ajax({
url: "https://api.twitter.com/1.1/search/tweets.json",
dataType: "jsonp",
data: "q=%23fml",
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Bearer XXmyBearerCodeXX");
},
success: function(json){ alert(json); }
});
编辑1 - 验证的Twitter通话
使用hurl.eu我能够通过上述查询和授权标头从API获得成功的响应,所以我认为这意味着我的Twitter调用是正确的,只是在jQuery.ajax()中没有正确设置,但我只是看不到缺少的东西。
答案 0 :(得分:6)
您无法使用带有dataType JSONP的AJAX调用设置请求标头。
请参阅此问题:Set Headers with jQuery.ajax and JSONP?
最佳解决方案是使用服务器端代理来搜索您。我知道你正在寻找一个仅限客户端的解决方案,但是由于这个限制,而且无法绕过CORS,这就是今天Twitter API的工作方式。
修改如果您无法访问代理,则可以使用Yahoo's YQL之类的代理。
答案 1 :(得分:0)
$.getJSON(http://localhost:8080/test.jsp?callback=?",
{
jspqueryStr : queryStr,
jspgeocodeStr : geocodeStr,
lat:latStr,
lan:lngStr,
radius:radiusStr,
}, displayResult);
//This function returns the data as json object from server.
function displayResult(data) {}
In the jsp the code is like below
<%
String jspqueryStr = request.getParameter("jspqueryStr");
String jspgeocodeStr = request.getParameter("jspgeocodeStr");
String diseasename = request.getParameter("jspqueryStr");
String lat = request.getParameter("lat");
String lan = request.getParameter("lan");
String radius = request.getParameter("radius");
Gson gson = new Gson();
String json = gson.toJson(tweetList);
json = request.getParameter("callback") + "(" + json + ");";
out.println(json);
public List<Status> searchstream(){
//here all the twitter4j api code to get the data
retrun tweetList;
}
%>
`