Bonjour à tous,

Depuis la dernière mise à jour de FreshRss, il est possible de faire du scrapping de site web avec xpath afin de créer des flux rss pour les sites qui n’en n’ont pas.

Plus de détail ici : https://danq.me/2022/09/27/freshrss-xpath/

J’ai mis en place ce principe pour récupérer des infos sur le site de la mairie et celui de la com’com.

Je bloque sur un troisième, le site de l’office de tourisme (pour récupérer l’agenda culturel). J’aurais besoin d’aide afin de m’en dépatouiller. Je ne sais pas si je suis au bon endroit. Mais si vous savez vers quelle communauté je pourrais me tourner pour résoudre ce soucis, n’hésitez pas à me le dire.

Un peu de contexte.

Lors de son chargement, le site de l’office de tourisme charge dans un premier temps le html, mais sans les événements de l’agenda. Ces événements sont présents sur la page, mais dans une balise script sous forme d’un json stocké dans une variable item.

Une autre requête POST est ensuite effectuée avec en paramètre ce json pour le mettre en forme (html) puis l’insérer dans le corps de la page.

À partir de là, le scrapping se complexifie, auriez-vous une idée de comment récupérer ce json pour le transformer en quelque chose qui ressemblerais à un flux atom/rss/json ?

Je pensais faire un script bash, mais je suis un peu perdu avec xmlint, xisdel et jq.

C’est peu être un peu ambitieux, qu’en pensez-vous ?

  • @Sushouane
    link
    Français
    35 months ago

    Idéalement il faudrait que ton système soit capable d’attendre la résolution de de ce script. Les outils de browser automation comme playwright on des fonctions waitfor pour ça.

    Ya des choses qui m’échappe dans ton cas, la variable Item est déjà remplie dans la source du script ? Le contenu n’est pas plutôt dans la réponse de la requête post ?

    Il y aurait plusieurs manière de procéder mais j’ai l’impression que ton outils freshrss est pas assez complexe pour ça.

    • ObercailOP
      link
      Français
      15 months ago

      Oui item est rempli lors du premier GET celui de la page html. Mais pas la div censé contenir les évènements est vide. Un POST est ensuite fait avec le contenu du json de la balise item.

      Ca me parait très sale, bon après je suis pas dev web et je connnais pas les contraintes de dev.

      Merci en tout cas, je m’y repencherais peut-être un peu plus tard, (Avec du scripting bash ou python) en attendant, j’ai scrappé les actualités des mairies alentours, mais c’est un peu moins bien, jme retrouve pollué avec des infos qui me concerne pas directement.

      • @Sushouane
        link
        Français
        34 months ago

        Si c’est bien ce que tu décris, c’est juste teubé je pense, les contraintes du dev web y sont pas pour grand chose. C’est con, ton Json dans le script ça doit être grosso merdo ce que tu voudrais dans ton flux RSS…

  • @Camus
    link
    Français
    35 months ago

    C’est normalement le bon endroit, par contre je ne pourrai pas t’aider, mes connaissances en jQuery sont vraiment limitées ha ha

    • ObercailOP
      link
      Français
      35 months ago

      Merci quand même ^^, j’essaie de trouver une autre source pour essayer de contourner le problème, mais c’est quand même dommage, toute les infos sont déjà regroupées au même endroit, il me manque juste un bon vieux flux rss (ca aurait été le top)

  • ObercailOP
    link
    Français
    24 months ago

    Je l’ai eu :

    curl -s https://www.office-tourisme.fr/agenda/ | grep "var items =" | sed -E 's/var items = (\[.*\]);/\1/gm;t'  | jq '{"version":"https://jsonfeed.org/version/1.1", "title":"Office de tourisme", "home_page_url": "https://example.org/", "feed_url": "https://example.org/feed.json","items": [ .[] | {id: .id, title: .titre, url: .link, content_text: .content}]}'
    

    Il ne manque plus que FreshRss supporte jsonFeed, mais ca ne saurait tarder : https://github.com/FreshRSS/FreshRSS/pull/5662

    • @Camus
      link
      Français
      14 months ago

      GG

  • Snoopy
    link
    Français
    14 months ago

    Je crois que ça vaut le coup de l’ajouter au mégafil :)