2020年3月29日日曜日

Publish API のMethod: photos.listでデータ取得

Publish API のMethod: photos.listでデータ取得

filterは必須じゃないので空欄でもEXECUTE可能です。pageSizeの最大値は200ですが、pageTokenを使えば、続きのデータを取得可能です。最初に200個のデータを取得すると、最後に"nextPageToken"があるので、その文字列をpageTokenに貼り付けると次のデータを取得可能になります。

pageSizeを4→5→8→10と少しずつ増やしてみると、拒否された写真のデータが返って来ないことが分かりました。10個要求しても8個しか返って来ません。400個まで取得してみると395個しか返って来ないので、拒否されている枚数と一致です。1322個まで取得可能でしたが、累計で1307個しか返って来ないことが分かりました。15枚の不足です。現在拒否としてリストアップしているのが5枚、それ以外に5枚は拒否を確認出来ているのですが、あと5枚不明な写真があるようです。探すのが面倒だな。
宇賀神社、すずめ地獄が2枚、通潤橋、乗用車内の5枚と最近拒否を確認した5枚、後5枚が分からない。

EXECUTEした結果は下記の様にツリーを折りたたんだ状態で全てを選択してコピーすると楽です。

テキストエディタ等にペーストすれば内容を見ることが可能です。JSONエディタ等で開くとツリー表示と切り替えて見ることが出来ます。今回は日本語対応の「J_and_E」を使ってみました。
J and EでJSONファイルをツリー表示した様子
pageSizeを10とし、10個だけ取得した例です。0番目の一部を開いています。
9番目の後にnextPageTokenがあります。

私の場合は1,300枚ほどなので、200枚×7回で全データを得ることが出来ますが、枚数が多い人は自動化しないと面倒でしょうね。

☆JSONデータからphotoIdの値だけ抽出する方法(Windows10)
コマンドプロンプトでjqコマンドを使うと簡単に抽出出来ます。
※jq-win64.exeをjq.exeにファイル名を変えて使ってます。
c:\>type file.json | jq .photos[].photoId.id > photoId.txt

jqに-rを付けるとダブルクォーテーション無しになります。
c:\>type file.json | jq -r .photos[].photoId.id > photoId.txt

閲覧数のみは下記で抽出可能です。
c:\>type photolist.json | jq -r .photos[].viewCount > view_count.txt

typeコマンドをパイプ「|」でつないで、リダイレクト「>」でファイルに書き込みます。
これでphotoIdだけのリストファイルが作成されます。
リダイレクトを「>>」として7回分を追加書き込みしてソートしておくと便利です。
週に一回photoIdリストを取得しておくと、不具合発生中の承認と拒否の推移が分かります。コマンドプロンプトで下記の様にすると同じフォルダーのファイルをアペンドします。
c:\>copy /b photolist_*.json photolist_all.json

定期的にlistを取得するとviewCountのみ変化する。この行は下記で削除可能。
※位置情報が変わるのでおかしい(末桁が四捨五入??)詳細は未調査
type photolist.json | jq "del(.photos[].viewCount)" > photolist_delview.json
※代替方法 エディタMeryの置換で「^.*viewCount.*\n」を検索し削除する。

正規表現を使用、置換後の文字列欄は空白に


placeIdは下記で抽出可能です。ソートの後に重複削除が必要です。
c:\>type file.json | jq -r .photos[].places[].placeId > placeId.txt

clipにパイプすると、クリップボードに書き込みます。
c:\>type file.json | jq -r .photos[].places[].placeId | clip

【Windows 10】「クリップボード履歴」を活用する

※コマンドプロンプトでファイル名・ディレクトリ名を補完する機能はTABキーです。

2020年3月25日水曜日

curlって何?

json形式のファイルから特定の項目だけ抜き出したいとググっていると、「curl」の文字が出てきます。何だか分からないけど、Unix コマンドだろうと読み飛ばしていました。ちょっとググってみたら、curlコマンドとはサーバから、もしくはサーバへデータ転送を行うコマンドらしい。更にググっているとWindows10で既に使えるとの事。

 ・Windows 10 に curl がプリインストールされてた
コマンドプロンプトでcurlのバージョン表示
コマンドプロンプトで使えるけど、文字が小さくて見づらいと思っていたら、コマンドプロンプトのプロパティから、文字のフォントを変更すれば大きくなることにも気づきました。知らなかったのは自分だけかも。
コマンドプロンプト
コマンドプロンプトのプロパティ


Publish APIのTry this APIの画面で「cURL」とあるのは多分これの事らしい。

取りあえずメモはここまで。

2020年3月18日水曜日

Publish API を使ってマルチレベルツアーを作成

異なる階層の写真を複数重ねると、それらの間を垂直に移動することが可能になります。PCのGoogleマップでは画面右側コンパスの上に表示されます。Androidのマップでは画面左下に表示されます。ストリートビュー・アプリには表示されません。
立岩展望台2F の写真です。RFをクリックすると屋上に移動します。

従来、これはサードパーティツールを使用しないと実現出来ないと言われていましたが、Publish APIを使用すれば可能です。API Explorerを使用すればAPIキーは不要で、フォームにパラメータを記入するだけです。使用するのはMethod: photo.updateです。

事前準備として、約5m範囲内に重ねる写真を配置してください。SVAのマップで建物表記の枠内に配置しないと実現出来ないみたいです。写真は各階層に1枚あれば充分で、写真間の結合は不要です。次に各写真のphotoIdを調べてください。

updateMaskは"pose.level"、Request bodyには青い+マークをクリックしながら、下記の様な記入を行います。表示されるリストから選びながら、実際のキー入力はRFと2だけです。"number"は0が地上階で、上層階がプラス、地下はマイナスです。整数以外でも構いません。"name"は3文字以内で、画面に表示されるラベルです。記入が終わったらEXECUTEをクリックします。OAuthのアカウント確認後に実行されます。必要な階層分実施します。実行してもすぐには表示されませんので、数日お待ちください。


2020年3月3日火曜日

Publish API のlistで拒否された写真を確認

Publish API のMethod: photos.listで拒否された写真を確認してみました。
"photoId"に該当"photoId"はありませんが、隣接写真の"connections"の"target"には拒否された"photoId"が残っていました。これを見ると写真が承認されれば結合も回復するようです。筑紫耶馬渓の写真が拒否から承認に戻った時に、何もせずに数日待つと結合が回復したのを確認しているので、結合作業のやり直しは不要みたいです。



elevator widget

elevator widget
マルチレベルツアーの仕組み SVTPで投稿を見つけたのでリンクをメモ。
最初の方しか読んでないけど、publish API試行する時に参考になるかも。

stack overflow: How to publish multilevel shoot using Street view publish API
※ 5m以内に異なるレベルの写真がある場合にのみ表示されます。





2020年3月2日月曜日

Publish API を使うためにphotoIdとplaceIdを得る方法

Publish APIを使うには"placeId"と"photoId"が必要です。

(1)先ずは"placeId"の取得方法です。
JavaScriptを使える方は「POI Click Events」にサンプルがあるのでご覧ください。

下記の方法でも"plaseId"を得ることが出来ます。
1.「自分の投稿」から「写真」のサムネイル一覧で場所名をクリックしてください。

2.アドレスバーの「place」の後ろに"placeId"があります。

(2)次に"photoId"の取得方法です。
JavaScriptを使える方は「Street View Events」に参考になるサンプルがあるのでご覧ください。

下記の方法でも"photoId"を得ることが出来ます。
1.「自分の投稿(Your contributions)」からサムネイルをクリックしてください。
2.タイトルカードのメニュー「」から「画像を共有または埋め込む」をクリックします。
3.「地図を埋め込む」をクリックします。
4.「HTMLをコピー」します。

5.HTMLコードの"!1s"と"!2m"の間に"photoId"が有ります。

得られた"photoId"は下記のURLに追記すると画像が表示されます。(参照)
https://www.google.com/maps/@?api=1&map_action=pano&pano=