Help us understand the problem. What is going on with this article?

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

More than 3 years have 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の詳細や、その他の検索条件については次のドキュメントを参照。投稿ユーザでも検索できたり便利です。

kijibato
2018年も6投稿を目標に。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away