web-dev-qa-db-fra.com

Comment récupérer des histoires moyennes pour un utilisateur à partir de l'API?

J'essaie d'intégrer le blog Medium dans une application en affichant des cartes avec des images de messages et des liens vers la publication Medium d'origine.

Dans la documentation de l'API moyenne, je peux voir comment récupérer des publications et créer des publications, mais cela ne mentionne pas la récupération des publications. Est-il actuellement possible de récupérer des articles/récits pour un utilisateur à l'aide de l'API du support?

10
Tomas Romero

L'API est en écriture seule et n'est pas destinée à récupérer des publications (le personnel de niveau moyen m'a dit)

Vous pouvez simplement utiliser le flux RSS en tant que tel:

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

Vous pouvez simplement obtenir le flux RSS via GET, puis si vous en avez besoin au format JSON, utilisez simplement un module NPM comme rss-to-json et le tour est joué.

24
Antonio Brandao

Avec cette méthode REST, vous feriez ceci: GET https://api.medium.com/v1/users/{{userId}}/publications et cela renverrait le titre, l'image et l'URL de l'élément. Plus de détails: https://github.com/Medium/medium-api-docs#32-publications

Vous pouvez également ajouter "? Format = json" à la fin de n'importe quelle URL sur le support et récupérer des données utiles.

5
Casper Voogt

Si vous envisagez de l'obtenir du côté client en utilisant JavaScript, jQuery ou Angular, etc., vous devez créer une passerelle d'API ou un service Web qui vous sert de fil. Dans le cas de PHP, RoR ou tout autre côté serveur, cela ne devrait pas être le cas.

Vous pouvez l'obtenir directement au format JSON comme indiqué ci-dessous:

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

Dans mon cas, j'ai créé un service Web simple dans l'application Express et l'hébergé sur Heroku. React App frappe l'API exposée sur Heroku et récupère les données.

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);
    }
  });
});
3
Hearty

J'ai créé une fonction de base à l'aide de AWS Lambda et AWS API Gateway, si cela vous intéresse. Une explication détaillée se trouve sur cet article de blog ici et le référentiel de la fonction Lambda construite avec Node.js se trouve ici sur Github . J'espère que quelqu'un ici trouvera cela utile.

2
Mark Fasel

(Mise à jour de JS Fiddle et de la fonction Clay qui l'explique à mesure que nous avons mis à jour la syntaxe de la fonction afin qu'elle soit plus propre)

J'ai emballé le paquet Github @ mark-fasel mentionné ci-dessous dans un microservice Clay qui vous permet de faire exactement cela: 

Format de retour simplifié: https://www.clay.run/services/nicoslepicos/medium-get-user-posts-new/code

J'ai assemblé un peu le violon, puisqu'un utilisateur demandait comment utiliser le noeud final en HTML pour obtenir les titres de leurs 3 derniers articles: https://jsfiddle.net/h405m3ma/3/

Vous pouvez appeler l'API en tant que:

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

Vous pouvez également l'utiliser facilement dans le code de votre nœud à l'aide du paquet npm de clay-client et écrivez simplement:

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);

});

J'espère que c'est utile!

1
nicoslepicos
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 = wait MdFetch ('@ chawki726');

0
Chawki

Cochez cette case pour obtenir toutes les informations sur votre propre message ........

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
        })
    });

}
0
Yash