文件/图像下载到节点后的回调函数

时间:2017-12-31 13:58:48

标签: javascript node.js

我从Reddit获取一个JSON文件,并使用TWIT库在Twitter上使用相同的标题和图像重新发布每个帖子。但是我遇到的问题是图像要么与标题不对应,要么图像下载了一半(看起来扭曲)并跨越多个帖子:

例如: https://twitter.com/LCHSHITPOST

我猜这与在发送推文之前图像没有完全下载这一事实有关(调用makeImgTweet函数)。

此代码段获取json文件,然后遍历帖子以获取标题和图片网址。然后它从url下载图像并调用makeImgTweet函数。

var url = "https://www.reddit.com/r/teenagers/top.json?t=all";

request({
    url: url,
    json: true
}, function (error, response, file) {

    if (!error && response.statusCode === 200) {

        // loop through posts in JSON file
        // makes image tweet with title and image url
        (file.data.children).forEach(function(post) {
            var picStream = fs.createWriteStream('image.jpg');
            picStream.on('close', function() {
                console.log('file done');
                makeImgTweet(post.data.title);
            });
            request(post.data.url).pipe(picStream);
        })


    }
})

图像的路径始终相同,因为我不想保留它们。

makeImgTweet()函数:

function makeImgTweet(text) {
    var b64content = fs.readFileSync("./image.jpg", { encoding: 'base64' })

    // first we must post the media to Twitter
    Twit.post('media/upload', { media_data: b64content }, function (err, data, response) {
        // now we can assign alt text to the media, for use by screen readers and
        // other text-based presentations and interpreters
            if (!err) {

                var mediaIdStr = data.media_id_string;
                var altText = text;
                var meta_params = { media_id: mediaIdStr, alt_text: { text: altText } };

                Twit.post('media/metadata/create', meta_params, function (err, data, response) {
                    if (!err) {
                        // now we can reference the media and post a tweet (media will attach to the tweet)
                        var params = { status: text, media_ids: [mediaIdStr] }

                        Twit.post('statuses/update', params, function (err, data, response) {
                            if (!err) {
                                console.log(data)
                            }
                        })
                    } else {
                        console.log(err);
                    }
                })
            } else {
                console.log(err);
            }
    })             
}

0 个答案:

没有答案