【问题标题】:How to get Tweet preview image如何获取推文预览图片
【发布时间】:2021-07-06 06:30:57
【问题描述】:

我正在尝试从其链接中获取推文的元标记。我可以使用名为html-metadata-parser 的模块获取元标记。我的问题是当我查看 Twitter 的元标签时,我在推文上看不到图像标签。但是当我在 Discord、Instagram 和 Whatsapp 等聊天中发布链接时,它也向我展示了 Tweet 的图像。有谁知道如何获取预览图片的链接?

 require('dotenv').config();

    const router = require('express').Router();
    const Meta = require('html-metadata-parser');
    const axios = require('axios');
    const Jimp = require('jimp');

    router.post('/webhooks/discounts', async (res, req) => {
    const { link, provider, oauth } = req.body;

    if (
        oauth === process.env.IFTTTOAUTH
    ) {

        var response = await Meta.parser(link);
        const metaTags = JSON.stringify(response, null, 3);

        let hasImage;
        let ProviderNameURL;

        await metaTags.og.images[0] ? hasImage = true : hasImage = false;
        provider === "Steam" ? ProviderNameURL = "steam" : provider === "Ubisoft" ? ProviderNameURL = "ubisoft" : provider === "EpicGames" ? ProviderNameURL = "epic_games" : provider === "GOG.com" ? ProviderNameURL = "gog_com" : provider === "Humble Bundle" ? ProviderNameURL = "humble_bundle" : "unknown";

        const text = await metaTags.og.description;
        const image = hasImage === true ? await metaTags.og.images[0].url : null;
        const icon = `https://cdn.syfac.xyz/images/game_markets/${ProviderNameURL}.png`;
        const urlToDiscount = link;

        try {
            axios.post(requesterURL, {
                text,
                image,
                provider,
                icon,
                urlToDiscount,
                hasImage,
            })
        } catch (err) {
            console.log(err)
        }
    } else {return;}
    })

    module.exports = router;

这是我的代码。 og:image 不是我要找的,因为它代表个人资料图片。

当我检查 Twitter 的元标签时,我看到一个带有 preconnect 的链接标签和一个带有 dns-prefetch 的链接标签,它们都转到 //pbs.twimg.com,当我从 Discord 中的嵌入中检查 şmage 源时,它是一个来自 pbs.twimg.com 的链接,所以我认为我有一些进展,但我仍然不知道如何获取图像。

【问题讨论】:

  • 您正在寻找的是“og:image”吗?另外,如果您提供您的代码和一些结果会很有帮助
  • @mertdökümcü 当我检查 Twitter 的元标签时,我看到了 og:image,但那是创建推文的用户的个人资料图片。我将编辑我的问题并添加我的代码。
  • 刚刚发布了一个可能的解决方案。希望它有效。我认为您需要使用 Twitter API。

标签: javascript twitter meta-tags tweets


【解决方案1】:

所以,如果我没记错的话,您正在寻找的是为推文生成的预览图像。您可以使用 Twitter API 进行此类操作。随着时间的推移,我发现使用 Twitter 的 API 比解析/抓取它要好得多。请看:https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media

你需要做的是:

  • 获取 Twitter 开发者帐户。这将帮助您访问 Twitter API。
  • 使用 API 并获取有关推文和/或 Twitter 用户的详细信息。

这是一个例子:

示例推文 URL:https://twitter.com/TravelVida/status/1380913486931361794 所以 ID 是:1380913486931361794

我使用此 ID 创建请求并将其与 Postman 一起使用。在您的情况下,您应该将此调用调整为您的 JavaScript 代码。这是请求网址:

https://api.twitter.com/2/tweets/:id?expansions=attachments.media_keys&media.fields=duration_ms,height,media_key,preview_image_url,public_metrics,type,url,width

然后回应:

{
    "data": {
        "attachments": {
            "media_keys": [
                "3_1380913484095963145",
                "3_1380913484456718339"
            ]
        },
        "id": "1380913486931361794",
        "text": "Amankila, Bali, Indonesia ??\nvia: bennyjurdi 
    },
    "includes": {
        "media": [
            {
                "height": 1537,
                "width": 1242,
                "media_key": "3_1380913484095963145",
                "url": "https://pbs.twimg.com/media/Eyn9f1UWQAkLAFe.jpg",
                "type": "photo"
            },
            {
                "height": 1540,
                "width": 1242,
                "media_key": "3_1380913484456718339",
                "url": "https://pbs.twimg.com/media/Eyn9f2qW8AMbC0-.jpg",
                "type": "photo"
            }
        ]
    }
}

最后一张图片的预览网址是您所需要的。 图片网址:https://pbs.twimg.com/media/Eyn9f2qW8AMbC0-.jpg

预览:

【讨论】:

  • 这太酷了,但我没有被接受为 twitter 开发帐户...
  • 我猜没有别的办法
  • 我创建了一个新帐户,看看它是否被接受,我希望它可以接受
【解决方案2】:

这个header几乎可以从url获取正确的图片

headers: {
"user-agent": "googlebot", // fetches with googlebot crawler user agent
"Accept-Language": "fr-CA", // fetches site for French language
}

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2014-04-19
    • 2015-02-06
    • 2017-06-02
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多