3

这是一个非常简单的调用 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() 中没有正确设置,但我只是不这样做'看不出缺少什么。

4

2 回答 2

6

您不能使用具有 dataType JSONP 的 AJAX 调用来设置请求标头。

看到这个问题:Set Headers with jQuery.ajax and JSONP?

最好的解决方案是使用服务器端代理为您进行搜索。我知道您正在寻找一个仅限客户端的解决方案,但是由于存在这种限制,并且无法绕过 CORS,这就是今天 Twitter API 的处理方式。

编辑如果您无权访问 代理,则可以使用雅虎 YQL 之类的代理。

于 2013-06-08T23:01:37.950 回答
0

在您的服务器端创建一个 jsp 或 servlet,然后从客户端对 .jsp/servlet 进行 JSON 调用,这会将 json 对象返回给 javascript。在服务器端使用 twitter4j api。示例代码:`

$.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;
}

%>
`
于 2013-09-05T02:11:41.893 回答