Recherche d'URLs d'images dans les sujets

J’ai cherché et lu comment rechercher du contenu efficacement, mais je n’ai pas trouvé de réponse.

J’ai un forum Discourse dont je suis modérateur (je n’ai pas accès au backend). Quelqu’un a publié de nombreux sujets où des images étaient liées en externe à un fournisseur d’hébergement tiers (dans ce cas, Google Docs). Cette personne a quitté l’entreprise et tous ces liens d’images sont maintenant brisés.

Je peux (et j’ai) parcouru manuellement certains de leurs messages pour trouver et corriger (merci Internet Archive) les images brisées. Mais c’est laborieux. J’aimerais obtenir une liste de tous les sujets contenant ces URL d’images brisées afin que nous puissions les corriger collectivement, en re-téléchargeant les images sur le site.

Je peux bien sûr utiliser la recherche pour trouver with:images #tutorials, mais je ne peux pas rechercher dans les URL d’images pour, par exemple, googleusercontent. Est-ce possible, sans accès à l’API ou au backend rake ?

2 « J'aime »

Un administrateur pourrait créer une requête d’explorateur de données qui trouve ces publications.

Mais si l’administrateur ne voulait pas que cela se produise, il devrait activer le téléchargement des images en local. C’est un problème qu’ils ont créé et ce n’est pas vraiment le travail d’un modérateur de le résoudre.

3 « J'aime »

Cela signifie que vous ne pouvez pas non plus installer l’explorateur de données ? Ce serait l’outil de choix pour cela.

Comment les images sont-elles formatées dans les publications ? Affichent-elles uniquement l’URL brute, utilisent-elles [img], \u003cimg\u003e, ![](url)… ?

Juste pour illustrer votre problème. Une publication pourrait contenir une URL d’image cassée, telle que https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg

La publication contient l’URL,

Mais il renvoie quelque chose comme

<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg" target="_blank" rel="noopener" class="onebox">
    <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg" width="" height="" loading="lazy">
</a>

Ce qui ne contient aucune chaîne de caractères pouvant être recherchée.

Est-ce que c’est ce qui se passe ?

3 « J'aime »

Correct, je ne peux pas installer de plugins.

Ils sont formatés en markdown standard ![](url)googleusercontent fait partie de l’URL. Par exemple :

![|312x416](https://lh7-rt.googleusercontent.com/docsz/AD_4nXeWkc1cZH8jtNveMhet36oWsLDlUxA-2QadGepx8Uuw1naq6vx5JAd6oyQ2pSmLJkKN97ZnTlV2txMqdNb0QMDCqV0xu-0xOFzePw2hnrNPUNbHoHMWh60KJpP3QkLq2E3Gp0-cKrf3tSWjML8oIQ3I9JQ?key=7YTVKNzk_oQvl95Fd_BKLQ)

Si je recherche googleusercontent, aucun résultat n’est retourné. Pourtant, je peux trouver des publications qui contiennent des images, référencées par une URL contenant le texte googleusercontent. Je ne sais pas s’il s’agit d’un bug ou d’une fonctionnalité qui fait que discourse ne recherche pas dans les URL des liens d’images formatés en markdown.

1 « J'aime »

Je pense que la recherche Discourse est effectuée sur le message traité, qui contient du HTML.
La recherche ignore les balises HTML, et les balises IMG ne contiennent aucun texte, d’où l’impossibilité de retourner ce que vous cherchez.

Pourquoi ne pas utiliser l’API ?

Vous pourriez créer un script local qui déclenche une requête de recherche pour les messages de l’utilisateur contenant des images, itère sur les résultats (assez lentement pour ne pas atteindre les limites de débit, et vous pouvez également interroger le contenu brut des messages si nécessaire) et affiche les messages contenant la sous-chaîne que vous recherchez.

Peut-être existe-t-il une solution plus simple, mais c’est ce que je ferais en l’absence d’autre option. C’est assez simple à faire.

Parce que l’administrateur ne lui donne pas de clé API ?

Parce qu’elle n’est pas programmeuse ?

Il semble que ce soit un problème créé par l’administrateur et qu’il ne soit pas intéressé à résoudre.

1 « J'aime »

Ouais, je veux dire, une clé n’est pas requise pour les points de terminaison de recherche et de publication de l’API nécessaires à ma suggestion, à moins que je ne me trompe ?

Et bien sûr, cela nécessiterait idéalement des connaissances de base en programmation, même si les IA peuvent probablement générer un bon script de base.

Le problème mentionné n’est certainement pas idéal à résoudre sans accès administrateur.

2 « J'aime »

Je n’ai pas demandé de clé API (bureaucratie), et je n’étais pas au courant que j’en aurais besoin pour effectuer ce que je percevais comme une requête de recherche « simple ». Je n’étais pas au courant qu’elle n’examine pas les balises HTML dans le contenu. C’est donc expliqué, merci.

Ce n’est pas un problème que les administrateurs ont créé. C’est juste une situation dont les administrateurs et les créateurs de contenu n’étaient pas au courant jusqu’à ce que quelqu’un quitte l’entreprise et que l’accès à Google Docs soit coupé pour ce compte, rendant les images disparaître/se casser.

Je suis d’accord que je pourrais demander une clé API, ou écrire quelque chose localement pour gratter le site et trouver les publications incriminées. Je ferai l’une de ces choses.

Merci pour les réponses. :pray:

2 « J'aime »

Vous n’avez pas besoin de clé API pour effectuer des recherches.

Je ne suis pas sûr qu’une clé API puisse vous aider à résoudre votre problème plus facilement.

Voici un exemple de script Python :robot: qui parcourt mes publications (1 publication toutes les 3 secondes) sur meta et renvoie celles qui contiennent la sous-chaîne upload:// dans le contenu brut :

import requests
import time

def fetch_posts(page):
    url = f"https://meta.discourse.org/search.json?q=%40cocoquark&page={page}"
    response = requests.get(url)
    return response.json()

def fetch_post_content(post_id):
    url = f"https://meta.discourse.org/posts/{post_id}/raw"
    response = requests.get(url)
    return response.text

def process_posts():
    page = 1
    while True:
        print(f"page {page}")
        data = fetch_posts(page)
        
        for post in data['posts']:
            content = fetch_post_content(post['id'])
            if "upload://" in content:
                print("https://meta.discourse.org/posts/" + str(post['id']))
            time.sleep(3)        
        
        if len(data['posts']) < 50:
            print("No more results.")
            break
        
        page += 1

if __name__ == "__main__":
    process_posts()
Output
page 1
https://meta.discourse.org/posts/1682015
https://meta.discourse.org/posts/1677389
https://meta.discourse.org/posts/1679834
https://meta.discourse.org/posts/1678673
https://meta.discourse.org/posts/1679833
https://meta.discourse.org/posts/1678629
https://meta.discourse.org/posts/1678229
https://meta.discourse.org/posts/1676531
https://meta.discourse.org/posts/1674982
https://meta.discourse.org/posts/1670250
https://meta.discourse.org/posts/1674421
https://meta.discourse.org/posts/1671959
https://meta.discourse.org/posts/1674355
https://meta.discourse.org/posts/1673357
https://meta.discourse.org/posts/1669322
https://meta.discourse.org/posts/1665519
page 2
https://meta.discourse.org/posts/1674153
https://meta.discourse.org/posts/1670613
https://meta.discourse.org/posts/1666606
https://meta.discourse.org/posts/1674992
https://meta.discourse.org/posts/1672811
https://meta.discourse.org/posts/1672050
https://meta.discourse.org/posts/1686260
https://meta.discourse.org/posts/1684497
https://meta.discourse.org/posts/1680692
https://meta.discourse.org/posts/1675012
page 3
No more results.
2 « J'aime »

Magnifique, merci @Canapin !
J’adore un peu de python :pray:
J’ai maintenant identifié tous les fils de discussion avec des images cassées grâce à votre aide.
J’apprécie beaucoup.

3 « J'aime »

Vous n’avez pas besoin d’une clé API pour faire une recherche simple, mais je ne vois pas l’intérêt d’“utiliser l’API” pour faire une recherche simple.

Peut-être ai-je mal compris le problème. Cela ressemblait à un problème qui ne se serait pas produit si download remote images to local avait été activé, et il l’est par défaut. Mais il est aussi probable qu’il ait été désactivé pour une raison bureaucratique pour laquelle l’administrateur l’a fait. Je pense qu’il sera inutilement difficile de résoudre votre problème sans le plugin data explorer ou un accès à Rails.

Mec ! Tu déchires !

3 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.