1

私の意図は、入力質問のリンクされた質問 ID のリストを取得することです。このために、StackExchange API はリンクされたAPI を提供します。この API は、セミコロンで区切られた質問 ID のリストを引数として受け取ります。

リンクを計算する必要がある質問の総数は約 100 万です。ただし、StackExchange API で許可される最大クォータは 10,000 リクエストのみです。したがって、私の場合、(セミコロンで区切られた) 100 個のバッチ リクエストを一度に送信するのが理想的でした。したがって、1 日で 100*10,000 = 100 万のリンクにアクセスできることになります。

残念ながら、このようなバッチ リクエストの場合、StackExchange API はフラットな JSON レスポンス配列を返すため、どのリンクがどの入力質問に対応しているかを知る方法がありません。たとえば、ID 14266328 の質問は、ID 5598291 と 1917935 の 2 つの質問にリンクされています。一方、質問 14266325 は 3270680 にリンクされています。

ここで、次のリクエストを StackExchange サーバーに送信すると、

http://api.stackexchange.com/2.2/questions/14266328%3B14266325/linked?order=desc&sort=activity&site=stackoverflow&filter=!--KJA8bUDfrh   

以下の返事が返ってきました。

{
  "items": [
    {
      "question_id": 3270680
    },
    {
      "question_id": 5598291
    },
    {
      "question_id": 1917935
    }
  ],
  "has_more": false,
  "quota_max": 10000,
  "quota_remaining": 9988
} 

問題は、この応答からは、14266328 にリンクされている質問と、他の質問にリンクされている質問を特定する方法がないことです。

一度に 1 つの question_id パラメータのみを送信するという簡単な方法を試しましたが、予想どおり 10,000 リクエスト後にリクエストがブロックされています。

4

1 に答える 1

1

目標は、ノードを質問として、エッジを質問間のハイパーリンクとして、スタック オーバーフローのネットワーク グラフを作成することです。API はそれを行うためのより簡単な方法ですが、レート制限があり、残念ながらバッチ リクエストでは、すでに不足しているレート制限を使用して、より多くの認証済みリクエストを作成する必要があります。この制限を回避する独創的な方法はありますが、スタック オーバーフローに関する T&C に違反する危険性があります。

つまり、Stack Exchange Data Dumpを使用して、このネットワーク グラフを自分で生成します。質問のテキスト コンテンツを見て、ハイパーリンクを抽出できます。その後、Stack Overflow からハイパーリンクを参照して ( /questions/linkedエンドポイントは Web サイト内のハイパーリンクのみを提供するため)、グラフを生成できます。reこれはすべて、Python などのプログラミング言語で (ハイパーリンクの抽出)、networkx/igraph(グラフを生成し、後で使用するために GraphML 形式でエクスポート)、およびlxml(データ ダンプ XML ファイルの反復解析) を使用して簡単に実行できます。

編集

データ ダンプは、postlinksXML ファイルを介してそのようなリンク構造を提供することが判明しました。これは事実上、ハイパーリンクを見つけるために投稿のテキスト コンテンツをスクレイピングする必要がなくなったことを意味します。

于 2014-08-11T12:25:26.350 に答える