javascript - 如何在 Node JS 中存储大型 Twitter 个人资料 ID

标签 javascript node.js twitter

我需要存储少数用户的关注者的关注者。 Twitter followers/ids 提供 id 列表,而不是 id_str。我将 api 返回的整个 id 列表存储在一个列表中。然后,对于每个 id,我都会找到关注者列表。每当我使用大 ID 查找他们的关注者列表时,我都会收到错误错误:抱歉,该页面不存在。我尝试将 id 转换为字符串,但错误仍然存​​在。我肯定错过了什么。我正在使用Twit library .

这是我收集少数用户的关注者列表的脚本。

// store in mongoDB
var storeUserFollowerList = function ( screenName, followerList ) {
twitter_profile.update ({ screen_name : screenName }, {
        follower_list : followerList
} , function ( err, doc ) {
    if ( err ) {
        console.log ( err );
        console.log ( ' Error while updating ');
    } else {
        console.log ( 'Successfull updation ');
        //console.log ( followerList );
    }
});
}
var storeUserFollowerList = function ( screenName, followerList ) {
twitter_profile.update ({ screen_name : screenName }, {
        follower_list : followerList
} , function ( err, doc ) {
    if ( err ) {
        console.log ( err );
        console.log ( ' Error while updating ');
    } else {
        console.log ( 'Successfull updation ');
        //console.log ( followerList );
    }
});
}

var getUserFollowerList = function ( screenName, nextCursor, callback ) {
twits.get ( 'followers/ids', { screen_name : screenName,
                                        cursor : nextCursor }, 
                        function ( err, data, response ) {
    //console.log (data);
    if ( err ) {
        console.log ( err + ' for ' + screenName );
    } else {
        callback ( screenName, data['ids'] );
        //console.log ( data['ids'] )
        if( data["next_cursor_str"] != "0" ) {
            getUserFollowerList ( screenName, data["next_cursor_str"], callback );
        }
    }
});
}

var getUsers = function ( callback ) {
screenNames.forEach ( function ( screenName ) {
    /*
    By default, an API endpoint that supports cursoring will assume 
    -1 was passed as cursor if you do not provide one
    */
    callback ( screenName, "-1", storeUserFollowerList ); 
});
}

这是我获取这些关注者的关注者列表的方法

var getFollowerListOfFollowers = function( followerList, i ) {
// if current follower is not in db then search for its follower list and update db
twitter_profile.find ( { id : followerList[i] }, function ( err, dbData ) {
    if ( err ) {
        console.log ( err );
    } else  {
        if ( dbData.length > 0 ) {
                console.log ( ' we have this user ... ignore ');
                getFollowerListOfFollowers ( followerList, ++i );
        } else {
            get_follower_list ( ' ' + followerList[i], enter_in_db );
            getFollowerListOfFollowers ( followerList, ++i );
        }
    }
});
}

var getFollowerOfFollowers = function () {
screenNames.forEach ( function ( screenName ) {
    twitter_profile.find ( { screen_name : screenName }, 
                                        function ( err, dbData ) {
        if ( err ) {
            console.log ( err );
        } else {
            if ( dbData.length > 0 ) {
                // get follower list for each follower of this user 
                getFollowerListOfFollowers ( dbData[0]['follower_list'], 0 );
                //console.log ( dbData[0]['follower_list'] );
            } else {
                console.log ( ' Data not found in DB ');
            }
        }
    });
});
}

终于

var enterInDB = function ( id, followerList ) {
new twitter_profile ( {
    _id:    id,
    id:     id,
    follower_list:  followerList
}).save (function ( err, doc ) {
    if ( err ) {
        console.log ( err );
    } else {
        console.log ( ' -----------Entered Profile into database------------- ');
    }
});
}

var getFollowerList = function ( id, callback ) {
twits.get ( 'followers/ids', { id : id }, function ( err, data, response ) {
    //console.log (data);
    if ( err ) {
        console.log ( err + ' for ' + id );
    } else {
        callback ( id, ""+data['ids'] );
        //console.log ( data['ids'] )
    }
});
}

获取 ID 错误,例如 730292604265435100702941284181237800

最佳答案

抱歉回复晚了。我这一天有点忙。

我尝试通过 Twitter API 控制台查找这些 id,并得到了与您提到的相同的结果。

在尝试了这些 id 的各种 api 方法后(每个人都失败了),我决定在 Twitter 上查找个人资料。

这也失败了。因此,我寻找了一个随机个人资料,其中关注者很少,但在这个 ID 范围内有一个关注者。

我找到了!他有一个 ID 为 728920217020158000 的关注者。如果您通过 api 查找此 id,您将看到没有结果,因为 id 无效。

我注意到 id_str 字段显示了另一个 id。如果您通过 api 查找 ID 728920217020157955,您将找到他的个人资料。

所以你必须告诉 twit 将字符串化的 ID 也返回给你。

我现在没有安装 twit,所以你可以尝试这种方式

twits.get ( 'followers/ids', { id : id, stringify_ids : true }
    //console.log (data);
    if ( err ) {
        console.log ( err + ' for ' + id );
    } else {
        callback ( id, ""+data['ids'] );
        //console.log ( data['ids'] )
    }
});

有关此端点的更多信息,请访问 Twitter API Reference

关于javascript - 如何在 Node JS 中存储大型 Twitter 个人资料 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37804241/

相关文章:

python - CRITICAL :root:twint. 得到什么 :User: Error mean?

java - 使用 HTTP API 在推特上上传视频

php - 使用社区 SDK 与 Google、Facebook、Twitter 进行身份验证

javascript - 如何在图像悬停中显示文本

javascript - 单击强制事件触发两次(Webpack 中可能存在问题)

javascript - 向 .json 文件添加另一个条目。 NodeJS

javascript - Node JS 中的外部 CSS

javascript - 如何使用 Express Node.JS 将 JSON 文件属性值大写?

javascript - 使用 moment.js 或其他 javascript 库生成 WCF JSON 格式的日期

javascript - 基于数据的动态图例