【问题标题】:How to retrieve Medium stories for a user from the API?如何从 API 中检索用户的媒体故事?
【发布时间】:2022-02-23 03:24:19
【问题描述】:

我正在尝试将 Medium 博客集成到应用程序中,方法是显示一些带有帖子图片和指向原始 Medium 出版物的链接的卡片。

从 Medium API 文档中,我可以看到如何检索出版物和创建帖子,但它没有提到检索帖子。目前是否可以使用 Medium 的 API 为用户检索帖子/故事?

【问题讨论】:

  • 目前似乎不可能。显然,您只能列出出版物并将帖子添加到出版物。 (但您甚至无法在创建帖子后对其进行更改,并且 POST 端点不会将带有 URL 的 Location 标头返回到新创建的帖子。)

标签: medium.com


【解决方案1】:

API 是只写的,不用于检索帖子(中型人员告诉我)

您可以像这样简单地使用 RSS 提要:

https://medium.com/feed/@your_profile

您可以简单地通过 GET 获取 RSS 提要,然后如果您需要 JSON 格式的内容,只需使用像 rss-to-json 这样的 NPM 模块即可。

【讨论】:

  • 我为 Antonio 上面提到的 rss-to-json 包制作了一个微服务包装器,这也使得提取数据变得容易:clay.run/services/nicoslepicos/rss-to-json。如果您想对其进行参数化,以便端点始终只拉取一些特定的提要,只需使用clay fork nicoslepicos/rss-to-json 分叉此端点,然后只需放入您希望它始终返回的硬编码提要。或者,还有另一个微服务:clay.run/services/nicoslepicos/medium-get-users-posts,它专门使用 Medium RSS 提要。
  • 是否有可能通过 RSS 或其他方式获取媒体的头版故事?
  • 并非所有作者的媒体帖子都显示在提要中
  • 如何获取中等 Feed 的下一页?
  • 顺便说一句,我创建了一个项目,您可以将媒体文章嵌入到您的自述文件中。看看:github.com/tonynguyenit18/github-readme-social-article
【解决方案2】:

编辑:

可以向以下 URL 发出请求,您将得到响应。不幸的是,响应是 RSS 格式,如果需要,需要对 JSON 进行一些解析。

https://medium.com/feed/@yourhandle

⚠️ 以下方法不再适用,因为它落后于 Cloudflare 的 DDoS 保护。

如果您打算使用 JavaScript、jQuery 或 Angular 等从客户端获取它,那么您需要构建一个 API 网关或 Web 服务来为您的提要提供服务。对于 PHP、RoR 或任何不应该出现的服务器端。

您可以直接以 JSON 格式获取它,如下所示:

https://medium.com/@yourhandle/latest?format=json    

就我而言,我在 express 应用程序中创建了一个简单的 Web 服务,并将其托管在 Heroku 上。 React App 访问 Heroku 上公开的 API 并获取数据。

const MEDIUM_URL = "https://medium.com/@yourhandle/latest?format=json";

router.get("/posts", (req, res, next) => {
  request.get(MEDIUM_URL, (err, apiRes, body) => {
    if (!err && apiRes.statusCode === 200) {
      let i = body.indexOf("{");
      const data = body.substr(i);
      res.send(data);
    } else {
      res.sendStatus(500).json(err);
    }
  });
});

【讨论】:

  • 有没有办法获取单个帖子内容?
  • 这不再有效。不幸的是,Cloudflare 正在添加验证码挑战。
【解决方案3】:

现在这个网址:

https://medium.com/@username/latest?format=json

位于 Cloudflare 的 DDoS 保护服务之后,因此您通常不会始终以 JSON 格式为您的提要提供服务,而是通常会收到一个 HTML,该 HTML 假设呈现一个网站以完成 reCAPTCHA,并且没有来自 API 请求的数据。

还有以下内容:

https://medium.com/feed/@username

有最近 10 个帖子的限制。

我建议我为此目的制作this free Cloudflare Worker。它作为一种外观,因此您不必担心帖子是如何从源、reCAPTCHA 或分页中​​获取的。

Full article关于它。

Live example。要获取以下项目,请将查询参数 ?next= 添加到 API 提供的 JSON 字段 next 的值。

【讨论】:

  • 我正在使用您的解决方案,但我认为他们最近修改了一些内容,使解决方案不再起作用:(
  • https://medium.com/feed/@username 还包括我自己或其他故事制作的 cmets 的数据。因此,将它们与实际故事分开似乎是不可能的
【解决方案4】:
const MdFetch = async (name) => {
  const res = await fetch(
    `https://api.rss2json.com/v1/api.json?rss_url=https://medium.com/feed/${name}`
  );
  return await res.json();
};

const data = await MdFetch('@chawki726');

【讨论】:

    【解决方案5】:

    使用该 REST 方法,您可以执行以下操作:GET https://api.medium.com/v1/users/{{userId}}/publications,这将返回标题、图像和项目的 URL。 更多详情:https://github.com/Medium/medium-api-docs#32-publications

    您还可以将“?format=json”添加到 Medium 上的任何 URL 的末尾,并获取有用的数据。

    【讨论】:

    • 这很棘手,但是当他们说“出版物”时,他们并不是指“用户的帖子”。正如安东尼奥所说,访问用户帖子的唯一方法是通过 RSS。 See this issue
    【解决方案6】:

    将您的帖子作为 JSON 对象获取

    您可以替换您的用户名而不是@USERNAME。

    https://api.rss2json.com/v1/api.json?rss_url=https://medium.com/feed/@USERNAME

    【讨论】:

      【解决方案7】:

      使用这个url,这个url会给出json格式的帖子
      将 studytact 替换为您的提要名称

      https://api.rss2json.com/v1/api.json?rss_url=https://medium.com/feed/studytact

      【讨论】:

        【解决方案8】:

        如果有人感兴趣,我已经使用 AWS Lambda 和 AWS API Gateway 构建了一个基本函数。在this blog post here 上可以找到详细说明,在Github 上可以找到使用 Node.js 构建的 Lambda 函数的存储库。希望这里有人觉得它有用。

        【讨论】:

        • 将您创建的 AWS Lambda 包装到 Clay 微服务中。此外,提醒您尝试向您发送一封电子邮件来告诉您这件事,但看起来您网站上的电子邮件正在反弹:)
        【解决方案9】:

        (更新 JS Fiddle 和解释它的 Clay 函数,因为我们将函数语法更新为更简洁)

        我将下面提到的 @mark-fasel 的 Github 包包装到了一个 Clay 微服务中,它使您能够做到这一点:

        简化返回格式:https://www.clay.run/services/nicoslepicos/medium-get-user-posts-new/code

        我整理了一些小技巧,因为用户询问如何使用 HTML 中的端点来获取他们最近 3 个帖子的标题: https://jsfiddle.net/h405m3ma/3/

        您可以将 API 调用为:

        curl -i -H "Content-Type: application/json" -X POST -d '{"username":"nicolaerusan"}' https://clay.run/services/nicoslepicos/medium-get-users-posts-simple
        

        您还可以使用clay-client npm 包在您的节点代码中轻松使用它,只需编写:

        Clay.run('nicoslepicos/medium-get-user-posts-new', {"profile":"profileValue"})
        .then((result) => {
        
          // Do what you want with returned result
          console.log(result);
        
        })
        .catch((error) => {
        
          console.log(error);
        
        });
        

        希望对你有帮助!

        【讨论】:

          【解决方案10】:

          勾选这个你会得到关于你自己帖子的所有信息......

          mediumController.getBlogs = (req, res) => {
              parser('https://medium.com/feed/@profileName', function (err, rss) {
                  if (err) {
                      console.log(err);
                  }
          
                  var stories = [];
          
                  for (var i = rss.length - 1; i >= 0; i--) {
          
                      var new_story = {};
          
                      new_story.title = rss[i].title;
                      new_story.description = rss[i].description;
                      new_story.date = rss[i].date;
                      new_story.link = rss[i].link;
                      new_story.author = rss[i].author;
                      new_story.comments = rss[i].comments;
          
                      stories.push(new_story);
                  }
                  console.log('stories:');
                  console.dir(stories);
                  res.json(200, {
                      Data: stories
                  })
              });
          
          }
          

          【讨论】:

          • 什么是mediumController,甚至?
          • NodeJs 控制器,我猜。正如我所见,语法是 NodeJS 的。
          【解决方案11】:

          我创建了一个自定义 REST API 来检索 Medium 上给定帖子的统计信息,您只需向我的自定义 API 发送一个 GET 请求,您将检索作为 Json abject 的统计信息,如下所示: 要求:

          curl https://endpoint/api/stats?story_url=THE_URL_OF_THE_MEDIUM_STORY
          

          回复:

          {
             "claps": 78,
             "comments": 1
          }
          

          API 在合理的响应时间(in the following Medium article.

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-08-13
            • 2017-11-08
            • 1970-01-01
            • 2021-08-16
            • 1970-01-01
            • 1970-01-01
            • 2012-03-10
            相关资源
            最近更新 更多