Posted at

Qiita APIで投稿一覧を取得するときに、検索クエリをORでつなぐ時の注意点

More than 1 year has passed since last update.

Qiita APIで投稿一覧を取得するときに、検索クエリをORでつなぐ場合は優先順位に注意が必要だったいうメモです。詳しく書かれたドキュメントが見つからなかったので、間違っているようでしたらコメントいただけると助かります。


ORを使わない場合

例えば、


  • iOSタグが付いた記事

  • 2017-09-20以降に作成された記事

  • ストックが5件より多い記事

をすべて満たす記事は、検索クエリに「tag:iOS created:>2017-09-20 stocks:>5」を指定した、

https://qiita.com/api/v2/items?page=1&per_page=10&query=tag%3AiOS+created%3A%3E2017-09-20+stocks%3A%3E5

で、JSONフォーマットで一覧が取得できます。それぞれの条件はANDでつながります。

(:が%3A、スペースが+などになっているのは、URLエスケープのためです。)


ORを使う場合

次に、iOSとAndroidの両方のタグのそれぞれ調べたくなったので、


  • iOSタグかAndroidタグが付いた記事

  • 2017-09-20以降に作成された記事

  • ストックが5件より多い記事

を条件にしてみます。

検索クエリに「( tag:iOS OR tag:Android ) created:>2017-09-20 stocks:>5」としたいところですが、残念ながら()に非対応なため、それぞれのタグに対して日付とストック数の条件をつけてあげる必要があるようです。

「 tag:iOS created:>2017-09-20 stocks:>5 OR tag:Android created:>2017-09-20 stocks:>5」

https://qiita.com/api/v2/items?page=1&per_page=10&query=tag%3AiOS+created%3A%3E2017-09-20+stocks%3A%3E5+OR+tag%3AAndroid+created%3A%3E2017-09-20+stocks%3A%3E5

長いです。


長すぎる場合は502?なので注意

あと、20~30タグのそれぞれにストック数と日付を指定した場合(検索クエリの文字列だけでも1500〜2000文字くらい)でリクエストした場合、JSONではなくHTMLの502: Bad Gatewayのページが返ってきました。

たくさん条件をつけるのは良くないようです。


参考ページ

APIの詳細や、その他の検索条件については次のドキュメントを参照。投稿ユーザでも検索できたり便利です。