【问题标题】:Using twitter API get error sometimes使用 twitter API 有时会出错
【发布时间】:2017-07-04 02:13:20
【问题描述】:

我使用以下代码,它有时有效但不稳定,当我运行程序时,有时会收到错误 420 和 json 解析错误,它没有给你很多提示如何解决它。知道我在做什么错吗?

错误是:

获取推文时出错:错误:状态代码:420 获取推文时出错: SyntaxError:JSON 中位置 0 处的意外标记 E

var Twitter=require('twitter');
var lclconf = require('../config.json');


var client=new Twitter({
  consumer_key: lclconf.twitter.consumer_key,
  consumer_secret: lclconf.twitter.consumer_secret,
  access_token_key: lclconf.twitter.access_token_key,
  access_token_secret: lclconf.twitter.access_token_secret
});
stream.on("data", function(data){
  console.log(data.id_str);
  var tweet_id="https://api.twitter.com/1.1/statuses/oembed.json?id="+data.id_str;
  request.get(tweet_id)
  .end(function(err,res){
      if(err){
        console.log("Error from Twitter API: " + err);
      }else{
        //console.log(res.body);
        io.emit('tweet',res.body);
      }
  });
});
stream.on('error', function(err){
  console.log("Error getting tweets: "+err);
});
io.on('connection', function(client){
  client.on("join", function(data){
    console.log(data);
  });
  client.emit("join",{"message":"running"});
});

也许如果有一种方法可以在发生错误时忽略它并继续,因为现在该过程已停止。

更新:

在 twitter 文档中有关于 HTTP 420 的信息,但不知道如何修复它...

【问题讨论】:

    标签: javascript node.js express twitter twitter-oauth


    【解决方案1】:

    HTTP 420 is returned when you are being rate limited.

    有一个https://publish.twitter.com/oembed resource URL,既不受速率限制,也不需要身份验证。我认为它返回的内容与您的程序所期望的相同。如果您传递具有推文链接的查询参数url,则可以使用它。尝试制作如下链接:

    "https://publish.twitter.com/oembed?url=https://twitter.com/"+data.user.screen_name+"/statuses/"+data.id_str
    

    对于 Twitter 返回的示例数据,请单击 here

    【讨论】:

    • 谢谢,但不知道如何用你的例子来做,你能用我的代码提供完整的例子吗?
    • 我不怎么用 Javascript 编程。我可以看到如何在您的代码中创建 Twitterclient 对象,但我不确定对象 requeststreamio。如果你告诉如何创建这些,那么我可以测试一些东西。 @shopiaT
    【解决方案2】:

    根据 pii_ke 的回复,您只需将tweet_id 修改如下:

    var tweet_id = "https://publish.twitter.com/oembed?url=https://twitter.com/" + data.user.screen_name + "/statuses/" + data.id_str;
    

    你可以复制粘贴完整的修改代码:

    var Twitter=require('twitter');
    var lclconf = require('../config.json');
    
    
    var client=new Twitter({
      consumer_key: lclconf.twitter.consumer_key,
      consumer_secret: lclconf.twitter.consumer_secret,
      access_token_key: lclconf.twitter.access_token_key,
      access_token_secret: lclconf.twitter.access_token_secret
    });
    stream.on("data", function(data){
      console.log(data.id_str);
      var tweet_id = "https://publish.twitter.com/oembed?url=https://twitter.com/" + data.user.screen_name + "/statuses/" + data.id_str;
      request.get(tweet_id)
      .end(function(err,res){
          if(err){
            console.log("Error from Twitter API: " + err);
          }else{
            //console.log(res.body);
            io.emit('tweet',res.body);
          }
      });
    });
    stream.on('error', function(err){
      console.log("Error getting tweets: "+err);
    });
    io.on('connection', function(client){
      client.on("join", function(data){
        console.log(data);
      });
      client.emit("join",{"message":"running"});
    });
    

    【讨论】:

    • 谢谢我试了一下,但我得到了同样的错误 :( ,还有其他想法吗?
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2013-08-19
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多