投稿画像と元のMedium出版物へのリンクが記載されたカードを表示することで、Mediumブログをアプリに統合しようとしています。
Medium APIドキュメントから、パブリケーションを取得して投稿を作成する方法を確認できますが、投稿の取得については言及していません。現在、MediumのAPIを使用して、ユーザーの投稿/ストーリーを取得できますか?
APIは書き込み専用であり、投稿を取得するためのものではありません(中程度のスタッフが私に言った)
RSSフィードを次のように単純に使用できます。
https://medium.com/feed/@your_profile
GETでRSSフィードを取得するだけで、JSON形式で必要な場合は、 rss-to-json のようなNPMモジュールを使用するだけで準備完了です。
JavaScript、jQuery、Angularなどを使用してクライアント側から取得する場合は、フィードを提供するAPIゲートウェイまたはWebサービスを構築する必要があります。 PHP、RoR、またはそうではないサーバーサイドの場合。
以下に示すように、JSON形式で直接取得できます。
https://medium.com/@yourhandle/latest?format=json
私の場合、エクスプレスアプリで簡単なWebサービスを作成し、Herokuでホストしました。 Reactアプリは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);
}
});
});
RESTメソッドを使用すると、これを実行できます:GET https://api.medium.com/v1/users/{{userId}}/publications
そして、これはタイトル、画像、アイテムのURLを返します。詳細: https://github.com/Medium/medium-api-docs#32-publications .
MediumのURLの末尾に「?format = json」を追加して、有用なデータを取得することもできます。
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');
(JS Fiddleおよび関数の構文をよりクリーンにするためにそれを説明するClay関数の更新)
Githubパッケージ@ mark-faselを以下で言及しているClayマイクロサービスにラップして、これを正確に実行できるようにしました。
簡略化された戻り形式: https://www.clay.run/services/nicoslepicos/medium-get-user-posts-new/code
ユーザーが最後の3つの投稿のタイトルを取得するためにHTMLでエンドポイントを使用する方法を尋ねていたので、ちょっとした工夫をしました。 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
})
});
}