リンクで検索

こんにちは。

フォーラムのコンテンツで外部リンクを検索し、そのリンクが存在するかどうかを確認する必要があるPythonスクリプトを作成しています。

問題は、手動で確認したところ、リンクが含まれている投稿の結果と含まれていない結果があることです。リンクは投稿内に存在しているにもかかわらずです。

これは予期されることでしょうか?

何を検索していますか?生のそれとも調理済みの?

生の例。

そして、それはOPスレッドでワンボックス化されます。同じドメインでも末尾が違うと機能する場合と機能しない場合があります。

正確にどのように検索しているのか分からないため、何が起こっているのか推測するのは困難です。\n\nもし私がこのタスクを実装するよう依頼されたら、おそらくData Explorerクエリを作成し、生のテキストまたは調理済みのテキストでリンクを含む投稿を検索するでしょう。

「いいね!」 2

現時点では、サイト側での通常の検索のみです。たとえば次のようになります。

私のフォーラムでは、リンクが1つ含まれるトピックを作成しましたが、リンクで検索してもトピックが見つかりません。

リンクの投稿が許可されているかどうかわからないため、ここではテストしていません。

まだテスト中です。長いリンク全体(最大101文字)を検索できないようです。そのため、長すぎる場合は少し短くする必要があります。サンプルリンクを投稿してもよいか、また、それが期待される動作かどうか教えてください。

Discourse は投稿内のあらゆるリンクを記録します。
ユースケースとしては、このデータを使用します。
私の知る限り、これらのリンクにアクセスする API はありません。
プラグインで実装するのは難しくないはずです。

「いいね!」 2

返信ありがとうございます。

この自動化を使用しています。リンクが100文字を超えない限り、非常にうまく機能します。超えると、そのリンクを持つトピックが存在しても、存在しないと返されます。

async def search_discourse_topic(session, link):
    headers = {"Api-Key": USER_API_KEY, "Api-Username": USER_ID}
    cleaned_link = clean_url(link)  # 提供されたURLをクリーンアップして一貫性を確保します
    try:
        log(f"Searching for topic with link: {cleaned_link}")  # 検索開始時にログを記録します
        async with session.get(f"{DISCOURSE_API_URL}/search.json", headers=headers, params={"q": cleaned_link}) as response:
            search_results = await response.json()
            topics = search_results.get("topics", [])
            if not topics:
                log(f"No topics found for link: {cleaned_link}")  # 結果が見つからない場合にログを記録します
            for topic in topics:
                if cleaned_link in topic.get("blurb", ""):  # トピックの説明にリンクが含まれているか確認します
                    log(f"Found existing topic with link: {cleaned_link}")  # 一致するトピックが見つかった場合にログを記録します
                    return topic["id"]
    except Exception as e:
        log(f"Error searching for topic with link: {e}")
    return None
「いいね!」 1