
はじめに
この記事は、「ArcGIS API for Python を使ってみよう」シリーズその③です。
当シリーズブログでは、ArcGIS API for Python(以下、Python API)の使い方をご紹介しています。
前回の記事では、Python API を用いた ArcGIS Online へのデータ作成方法をご紹介しました。今回は、ArcGIS Online 上に公開したデータを検索する方法をご紹介します。

アイテムの持つ情報から ArcGIS Online 上のアイテムを検索する
Python API を使用すると ArcGIS Online 上にあるアイテムを様々な切り口から検索することができます。検索を行う際の基本コードは次の通りです。1 行目は検索を行うコード、2 行目は検索結果を表示させるコードです。
<SPAN class="comment token"># 検索の基本コード</SPAN>
search_result <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN>search<SPAN class="punctuation token">(</SPAN>query <SPAN class="operator token">=</SPAN> <SPAN class="string token">"【クエリ構文を設定】"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># 検索結果を表示する</SPAN>
search_result<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
アイテムを検索するためには、ContentManager クラスの search() メソッドを使用します。検索の条件にクエリ構文を設定することで検索を行うことができます。サポートされているクエリ 構文については、search reference をご覧ください (英語)。
今回は次のクエリ構文を使用します。
- title:アイテムのタイトル
- uploaded:アイテムをアップロードした日付
- tags:アイテムのタグ
- access:アイテムの共有レベル
アイテム タイトルで検索

まずは、アイテムのタイトルで検索をしてみましょう。今回は、シリーズ②で ArcGIS Online に作成した、kanazawaParking というタイトルのフィーチャサービスを検索します。
アイテム タイトルで検索をする場合、クエリ構文に title を使用します。
<SPAN class="comment token"># アイテム タイトル (kanazawaParking) で検索する</SPAN>
searched_featureservice <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN>search<SPAN class="punctuation token">(</SPAN>query<SPAN class="operator token">=</SPAN><SPAN class="string token">"title: kanazawaParking "</SPAN><SPAN class="punctuation token">)</SPAN>
searched_featureservice<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
検索結果は次のように配列で返されます。

検索にはワイルドカードも使用することができます。
<SPAN class="comment token"># ワイルドカード(*) を使って検索する</SPAN>
searched_featureservice <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN>search<SPAN class="punctuation token">(</SPAN>query <SPAN class="operator token">=</SPAN> <SPAN class="string token">"title: kanazawa*"</SPAN><SPAN class="punctuation token">)</SPAN>
searched_featureservice<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
アイテムを ArcGIS Online にアップロードした日付で検索

アイテムを ArcGIS Online にアップロードした日付(作成日時)で検索してみましょう。クエリ構文に uploaded を使用し、期間を指定します。なお、ArcGIS 上での日付は Unix タイムで扱われているため、検索したい日付を Unix タイムに変換した上で、さらに 6 桁で 0 埋めして 19 桁にする必要があります。
以下では、指定日から現在時刻までの間にアップロードしたファイルを検索します。
<SPAN class="comment token"># 現在時刻を Unix タイムに変換</SPAN>
<SPAN class="comment token"># time モジュールを読み込む</SPAN>
<SPAN class="keyword token">import</SPAN> time
nowUnixtme <SPAN class="operator token">=</SPAN> int<SPAN class="punctuation token">(</SPAN>round<SPAN class="punctuation token">(</SPAN>time<SPAN class="punctuation token">.</SPAN>time<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">*</SPAN> <SPAN class="number token">1000</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># 19 桁になるよう 0 埋め</SPAN>
nowUnixtme_padded <SPAN class="operator token">=</SPAN> <SPAN class="string token">'%019d'</SPAN> <SPAN class="operator token">%</SPAN> nowUnixtme<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
<SPAN class="comment token"># 指定した日を Unix タイムに変換</SPAN>
<SPAN class="comment token"># datetime モジュールを読み込む</SPAN>
<SPAN class="keyword token">import</SPAN> datetime
tstr <SPAN class="operator token">=</SPAN> <SPAN class="string token">'2018-03-15'</SPAN>
<SPAN class="comment token"># 文字列を datetime に変換する</SPAN>
tdatetime <SPAN class="operator token">=</SPAN> datetime<SPAN class="punctuation token">.</SPAN>datetime<SPAN class="punctuation token">.</SPAN>strptime<SPAN class="punctuation token">(</SPAN>tstr<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'%Y-%m-%d'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># datetime を Unix タイムに変換する</SPAN>
unixtime <SPAN class="operator token">=</SPAN> tdatetime<SPAN class="punctuation token">.</SPAN>timestamp<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
miliUnixtime <SPAN class="operator token">=</SPAN> unixtime <SPAN class="operator token">*</SPAN><SPAN class="number token">1000</SPAN>
<SPAN class="comment token"># 19 桁になるよう 0 埋め</SPAN>
execUnixtme_padded <SPAN class="operator token">=</SPAN> <SPAN class="string token">'%019d'</SPAN> <SPAN class="operator token">%</SPAN> miliUnixtime
execUnixtme_padded<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
日付を Unix タイムに変換できたら、変換した Unix タイムをパラメータに指定して、検索してみましょう。
<SPAN class="comment token"># アップロードした日付で検索</SPAN>
searched_date <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN>search<SPAN class="punctuation token">(</SPAN>query<SPAN class="operator token">=</SPAN><SPAN class="string token">"uploaded:["</SPAN><SPAN class="operator token">+</SPAN> execUnixtme_padded<SPAN class="operator token">+</SPAN> <SPAN class="string token">" TO "</SPAN> <SPAN class="operator token">+</SPAN> nowUnixtme_padded <SPAN class="operator token">+</SPAN> <SPAN class="string token">"]"</SPAN><SPAN class="punctuation token">)</SPAN>
searched_date<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
アイテムをタグで検索

アイテムを ArcGIS Online にアップロードするときに付けたタグで検索してみましょう。付けたタグは、ArcGIS Online 上でアイテム詳細を表示して確認することができます。タグを設定することでアイテムをより検索しやすくなります。
クエリ構文に tag を指定します。
<SPAN class="comment token"># タグで検索</SPAN>
searched_tag <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN>search<SPAN class="punctuation token">(</SPAN>query<SPAN class="operator token">=</SPAN> <SPAN class="string token">"tags:geodev_jp"</SPAN><SPAN class="punctuation token">)</SPAN>
searched_tag<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
アイテムを共有レベルで検索

ArcGIS Online のアイテムはそれぞれに共有レベルが設定され、デフォルトでは非公開が選択されています。アイテム共有の詳細については ArcGIS Online ヘルプをご覧ください。
アイテムの公開レベルをまとめて確認したいときに便利です。
共有レベルは次の 4 種類です。
- private:非公開
- org:組織サイトのメンバーに公開
- public:全体に公開
- shared:グループに公開
<SPAN class="comment token"># 共有レベルで検索</SPAN>
searched_data <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN>search<SPAN class="punctuation token">(</SPAN>query<SPAN class="operator token">=</SPAN> <SPAN class="string token">"access:public"</SPAN><SPAN class="punctuation token">)</SPAN>
searched_data <SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
上記のコードでは、全体に公開しているアイテムを検索しています。
フォルダーを検索

ここまでは、アイテムの持つ情報をキーにアイテムを検索してきました。次は、ユーザーのフォルダーを検索します。
まずは自分が持っているフォルダーの一覧を取得してみましょう。結果は配列として返されます。
<SPAN class="comment token"># フォルダーを検索する</SPAN>
searched_folderlist <SPAN class="operator token">=</SPAN> user<SPAN class="punctuation token">.</SPAN>folders
searched_folderlist<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
では、結果として返ってきたフォルダー一覧の 1 つ目のフォルダーの中身を検索してみましょう。
<SPAN class="comment token"># 1 つ目のフォルダーの中身を検索</SPAN>
user<SPAN class="punctuation token">.</SPAN>items<SPAN class="punctuation token">(</SPAN>folder <SPAN class="operator token">=</SPAN> folderlist<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN></SPAN>
検索するフォルダー名がわかっている場合は、文字列で直接フォルダー名を指定します。
<SPAN class="comment token"># フォルダー名で検索</SPAN>
user<SPAN class="punctuation token">.</SPAN>items<SPAN class="punctuation token">(</SPAN>folder <SPAN class="operator token">=</SPAN> <SPAN class="string token">"geodev_2018/03/15"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN></SPAN>
おまけ:ArcGIS Online 全体で公開されているアイテムを検索
自分の組織外を検索するかどうかを決めるプロパティである outside_org を True にすると、他のユーザーが全体に公開しているアイテムを検索することができます。
<SPAN class="comment token"># パブリックのアイテムを検索</SPAN>
searched_public <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN>search<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"title:境界線表示用 "</SPAN><SPAN class="punctuation token">,</SPAN> outside_org<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN>
searched_public<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
今回ご紹介したコードは ESRIジャパン GitHub 上で公開しています。
ぜひ、みなさんもお試しください!
当シリーズ記事では、引き続き Python API でできることを紹介していきます。次回は、今回の記事で検索したアイテムを削除する方法をご紹介予定です。
関連リンク集
ArcGIS 関連ページ
・ArcGIS API for Python(ESRIジャパン製品ページ)
・ArcGIS for Developers(ESRIジャパン製品ページ)
・ArcGIS Online(ESRIジャパン製品ページ)
・ArcGIS for Developers 開発リソース集
・ESRIジャパン オープンデータポータル
・ArcGIS API for Python(米国Esri ページ(英語))
シリーズブログ 関連ページ
・ArcGIS API for Python を使ってみよう:できることや使いどころ
・ArcGIS API for Python を使ってみよう ①:Jupyter Notebook で使うための環境構築
・ArcGIS API for Python を使ってみよう:ArcGIS Pro からの環境構築 (ArcGIS Pro 2.1)
・ArcGIS API for Python を使ってみよう ②:ローカル端末から ArcGIS Online へデータを作成してみよう
・ArcGIS API for Python を使ってみよう ③:ArcGIS Online のアイテムを検索してみよう
・ArcGIS API for Python を使ってみよう ④:ArcGIS Online 上のアイテムを削除してみよう
・ArcGIS API for Python を使ってみよう ⑤:Web マップを作成してみよう
・ArcGIS API for Python を使ってみよう ⑥:解析ツールを使ってみよう
ArcGIS 開発リソース集
・ArcGIS for API for Pythonのコンセプト
・インストールガイド
・ArcGIS for API for Pythonのための基礎環境:conda入門