4

Foursquare APIを使用して、特定のカテゴリの会場のリストを取得しています。重要な要件の1つは、リストが網羅的である、つまり関連するすべてのポイントが含まれていることです。v2 / Venues / search APIエンドポイントは、出力に50の会場の制限を適用します。したがって、最初に頭に浮かぶアイデアは、領域をいくつかのセクションに分割し("sw"および"ne"パラメーターを使用)、結果を結合することです。

明らかに、ポイントの密度は場所によって大幅に異なるため、すべてのポイントが含まれるように検索ウィンドウのサイズを柔軟に調整するには、何らかの適応アルゴリズムを使用する必要があります。また、レート制限に達するリスクが高まるため、リクエストのクォータを使い果たしたときにアルゴリズムを停止する必要がある場合があります。

最後に、検索ウィンドウをさらに縮小する必要があるかどうかを判断する唯一の方法は、結果のポイント数を数えることだと思われます。50未満の場合、このセクションの完全なリストがあり、次のことができます。次のものに移動します。それ以外の場合は、さらに分割する必要があります。中間結果(つまり、葉を除くすべての結果が検索ツリーに表示される)を破棄するため、無駄に思えます。

だからここに私が持っているいくつかの質問があります:

  • 網羅的なリストをまとめるのに最適な方法ですか?たぶん私はいくつかのAPI機能が欠けていますか?
  • この場合に使用する特定のアルゴリズムはありますか?
  • 捨てなければならない結果の数をどのように減らしますか?

前もって感謝します!

4

2 に答える 2

10

重要な免責事項は、同じエリアで多くの検索を実行する場合、foursquareはそれを好まないということです。

そうは言っても、会場検索APIでcategoryIdフィルターを試してみる必要があります。foursquareのデータのほとんどは、食品(レストラン)とナイトライフに関連しています。

したがって、これらを除外すると(他の人を含めることで、除外する方法はありません)、より広い領域で検索しても、50未満の結果を得ることができます。

categoryIdフィルタリングが十分に機能したため、このようなアルゴリズムを実際に使用しようとしたことはありませんが、理論的には、アルゴリズムは単純で、各lat /lng0.001は約111メートルです。

小さな半径(大都市圏の場合は約200)を使用して検索し、エリアを三角測量(スキャン)します。

もともと多くの検索を実行するようになった(そして後で実行をやめた)のは、時々、foursquareがあなたに尋ねずに結果を除外することです(私にとっては、アルゴリズムの一部であるため、バグのように見えます)。たとえば、半径50メートルで検索し、目的の場所を見つけて(探しているものがわかっている)、500メートルに拡大しても、見つからない(50未満の結果が得られる)ため、ドロップアウトされませんでした。私はキャップを打ちました、それは???)のために脱落しました、私の検索場所を北に約300メートル移動し、それを見つけます->散発的な行動。

私のポイントは(そして私たちが多くの検索をやめ、アプローチを変更した理由)、あなたが達成しようとしていること、現在のAPIと現在の使用ポリシーを考えると「完全なカバレッジ」を行うのは非常に難しいです、そして- >それは本当に重要ではありません。数か月間遊んだ後、現時点でユーザーが探しているものと必要なものについてfoursqaureにクエリを実行する必要があることがわかりました。結果をキャッシュします。時間の経過とともに、完全なカバレッジが得られます。いくつかのスポットがありますが、長期的にはそれほど重要ではありません。

于 2012-06-06T12:47:53.423 に答える
2

うまくいけば、これはあなたがしていることではありませんが、友好的なリマインダーとして:foursquareのウェブサイトやAPIをスクレイピングすることは、その利用規約によって非常に禁止されています。

于 2012-06-06T14:33:15.670 に答える