我正在尝试通过显示一些带有帖子图像和指向原始 Medium 出版物的链接的卡片来将 Medium 博客集成到应用程序中。
从 Medium API 文档中,我可以看到如何检索出版物和创建帖子,但它没有提到检索帖子。当前是否可以使用 Medium 的 API 为用户检索帖子/故事?
我正在尝试通过显示一些带有帖子图像和指向原始 Medium 出版物的链接的卡片来将 Medium 博客集成到应用程序中。
从 Medium API 文档中,我可以看到如何检索出版物和创建帖子,但它没有提到检索帖子。当前是否可以使用 Medium 的 API 为用户检索帖子/故事?
API 是只写的,不打算检索帖子(中型员工告诉我)
您可以像这样简单地使用 RSS 提要:
https://medium.com/feed/@your_profile
您可以简单地通过 GET 获取 RSS 提要,然后如果您需要 JSON 格式的它,只需使用像rss-to-json这样的 NPM 模块就可以了。
编辑:
可以向以下 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);
}
});
});
现在这个网址:
https://medium.com/@username/latest?format=json
位于 Cloudflare 的 DDoS 保护服务之后,因此您通常不会始终以 JSON 格式为您的提要提供服务,而是通常会收到一个 HTML,该 HTML 假设呈现一个网站以完成 reCAPTCHA,并且没有来自 API 请求的数据。
以及以下内容:
https://medium.com/feed/@username
有最近 10 个帖子的限制。
我建议我为此目的制作这个免费的 Cloudflare Worker 。它作为一个门面工作,因此您不必担心如何从源、reCAPTCHA 或分页获取帖子。
关于它的完整文章。
活生生的例子。要获取以下项目,请使用 API 提供?next=
的 JSON 字段的值添加查询参数。next
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();
};
常量数据 = 等待 MdFetch('@chawki726');
使用该 REST 方法,您可以执行以下操作:GET https://api.medium.com/v1/users/{{userId}}/publications
这将返回标题、图像和项目的 URL。更多详情:https ://github.com/Medium/medium-api-docs#32-publications 。
您还可以将“?format=json”添加到 Medium 上的任何 URL 的末尾,并获取有用的数据。
将您的帖子作为 JSON 对象获取
您可以替换您的用户名而不是 @USERNAME。
https://api.rss2json.com/v1/api.json?rss_url=https://medium.com/feed/@USERNAME
使用这个 url,这个 url 会给出 json 格式的帖子
用你的提要名称替换 studytact
https://api.rss2json.com/v1/api.json?rss_url=https://medium.com/feed/studytact
(更新 JS Fiddle 和解释它的 Clay 函数,因为我们更新了函数语法以使其更清晰)
我将下面提到的 Github 包 @mark-fasel 包装到 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);
});
希望这会有所帮助!
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
})
});
}
我创建了一个自定义 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 在合理的响应时间(< 2 秒)内响应,您可以在下面的 Medium 文章中找到更多相关信息。