2020年2月29日土曜日

Method: photos.batchUpdateを使ってまとめてアップデート

Method: photos.batchUpdateを使うとまとめてアップデート可能です。photo.updateを続けて複数書くような感じです。途中までやってみたら、下記の様に青い+マークをクリックしながら記入して行けば良いみたいです。一度に出来るのは20枚(?)までとの事。SVAで、すべて選択の時も20枚までにしなきゃダメなのかも。

アップデートするものが無いので、さわりだけです。
batchUpdate

Method: photo.updateを使ってplace変更

Method: photo.updateを使ってplaceを変更してみました。photoId, placeId, 場所名が必要です。updateMaskはplaces, Request bodyにはplaceId、名前、言語コードを記入します。下記の様に入力後、EXECUTEです。
updateで場所(リスティング)の変更
以前に二か所に登録された時期が有りましたが、そのまま残しておいた写真のデータをgetしてみると、下記の様になってました。"places"と複数形になっているので、本来は複数個所登録出来る仕様なのかも知れません。同様に入力したら今も二重登録可能かも。
場所が二重に登録された例

Method: photo.updateを使って結合(connections)

Method: photo.updateを使って結合(connections)してみました。シンプルに2枚の写真を互いに結合してみます。必要なのは各々のphotoIdで、updateMaskにはconnectionsを指定します。事前に結合した写真のデータを参考のためにgetしておくと分かり易いです。Request bodyのblue "add" circleをクリックして行き、idは結合相手のphotoIdを記入します。EXECUTEしたら、もう1枚の写真も同様に処理します。終わったら、Method: photos.listで確認すると結合されていることが分かります。但し、マップ上に反映されるまで時間が掛かります。あれ、これを書きながらマップを確認して見たらもう接続されてました。SVA使うよりも早いのかな、単にサーバーが暇だっただけかも。

Request bodyは下記の様な内容だけ書けばOK!
実際にやってみる方が簡単です。 Try this API
多分Method: photos.batchUpdateを使えば一度に出来るのかも。


{
  "connections": [
     {
        "target": {
          "id": "CAoSLEFGMVFpcE・・中略・・WHd1cVJRUjBk"
        }
      }
  ]
}

2020年2月28日金曜日

Let's try the Street View Publish API.

Publish APIを使ってみましょう!

公式の情報はココから読めます。英語だし、プログラマーでは無い私にはちんぷんかんぷんです。チラ見してガイドに進みます。前書きを読むとサードパーティアプリの開発者向けと書いてあるので、ど素人には難し過ぎです。でもAPIs Explorerを使うと1分間で体験出来るらしい。APIs Explorerをクリックすると、・・・1分で諦めました。

流し読みして、Method: photo.getを見つけました。画面右側に「Try this API」があります。これで何か出来そうだな。photoIdは何故か知っていたので、フォームに貼り付けて、LanguageCodeは日本語だから「ja」と記入、viewはプルダウンからBASICを選択です。EXECUTEをクリックしてみると、Googleのアカウント選択画面が表示されたので、該当アカウントを選択です。認証をパスすると、EXECUTEの下に結果が表示されます。あれ? API keyはどうなったんだろう。昔登録してたかも??

photoIdはHow to get Panorama ID を読めば取得出来ると思います。Panorama IDとかPano IDとか書き方が違いますが、64BITの文字列です。JavaScriptを使える人はStreet View Events 辺りを参照すればGUIで取得可能です。

続きは「Method: photo.getを使ってみた」を読んでください。拒否された写真と承認された写真のデータ例を書いています。

データ形式は難しいけど、位置情報を数値で見れたり、結合の状況が分かるので便利です。

※メモ photoIdの欄に使用したIDが蓄積されるけど、これはリスト表示の部分にマウスポインターをかざして、Shift + Deleteキーで削除出来ます。

2020年2月27日木曜日

Method: photo.update を使ってみる

Method: photo.updateのリファレンスを読んでみます。写真の向き、場所の関連付け、接続などのメタデータの更新が可能。写真のピクセルは変更出来ない。upfateMaskフィールドのみが使用される。これが無ければ全てのフィールドに適用される。要はアップデートしたいフィールド指定を忘れない事。


エラーコードは省略

updateMask:
    • pose.heading 写真のセンターの向き
    • pose.latLngPair ジオタグ緯度経度
    • pose.pitch 仰角
    • pose.roll 回転
    • pose.level 建物の階数 1F 2F など
    • pose.altitude 高度(地上高?) m単位
    • connections 他写真へのリンク
    • places 場所の関連付け(リスティング)
取りあえずやりたい事は位置情報のセットなので、これに注目pose.latLngPair

bodyはgetした内容を編集すれば良いのかな? この辺がちょっと不明
suggestionsに従って緯度経度だけ入力し、EXECUTEしてみました。結果はすぐに反映しないみたいなので、後日確認。エラーコードは返って来てないので成功なのだろうか?
追記:しばらく経つと、サムネイルをクリックした時に新しい位置にペグマンが移動しました。青点表示は更に時間が掛かるようです。getしても反映は遅いです。

数値で入力出来るので、タブレットを指先で動かすよりも正確に置けそうだ。

テスト用のアカウントでやってみたけど、APIキーを取得していなかったみたい。Chromeにログインさえしていれば「Try this API」は出来るのかも??

ジオタグ変更の様子を録画しました。


Method: photo.delete を使って削除

Publish APIMethod: photo.delete を使って削除してみました。「試してみる」をクリックするとパラメーターを入力するだけで、このAPIを試すことが可能です。使うにはCredentials(資格情報)として、GoogleのアカウントとAPIキーが必要です。

削除に必要なのは「photoId」、64bitのIDを入力しEXECUTEをクリックするだけです。しばらくすると、写真タブから削除されたことが確認出来ました。getしてみると、下記の様に"NOT_FOUND"で削除の確認が出来ました。


{
  "error": {
    "code": 404,
    "message": "Image not found for id: CAoSLEFGMVFpcE5wUEt6YU1zM3QzeXdDV21fYUp6aHRFRGxEYThxdUg1Z1E5dmto",
    "status": "NOT_FOUND"
  }
}

2020年2月26日水曜日

Method: photo.getを使ってみた

Publish APIMethod: photo.getを使ってみました。「試してみる」をクリックするとパラメーターを入力するだけで、このAPIを試すことが可能です。使うにはCredentials(資格情報)として、GoogleのアカウントとAPIキーが必要です。

photoId: IDを指定します。"CA"で始まる64bitの文字列です。
languageCode: 日本語ならば"ja"です。
view: プルダウンから"BASIC"を選択

EXECUTEをクリックすると、アカウント選択画面が表示されるので選択してください。APIキーを持っていると、APIが実行されて結果が表示されます。※初めての使用では画面が異なるかも知れません。

下記は拒否された写真の例です。
{
  "error": {
    "code": 503,
    "message": "Photo with id CAoSLEFGMVFpcE1zbkpwRkxhZTdyd2N2XzUwUHZjZnFFdW12VkU4NDA3aEpTT1cx is still processing. Please retry later.",
    "status": "UNAVAILABLE"
  }
}

下記は承認されている写真の例です。
{
  "photoId": {
    "id": "CAoSLEFGMVFpcFBaUFhKdDhFdkpuVk5fU1o3bHdNLVU5QnA3b3J0X2F5QjVGWTN0"
  },
  "pose": {
    "latLngPair": {
      "latitude": 33.510758081764017,
      "longitude": 130.490983016789
    },
    "altitude": "NaN",
    "heading": 34,
    "pitch": "NaN",
    "roll": "NaN"
  },
  "connections": [
    {
      "target": {
        "id": "CAoSLEFGMVFpcFB1XzFxVU9XU0s4ZG03QmNfUkNYckFHUnZTRGhkd0t3OUZoSDdV"
      }
    },
    {
      "target": {
        "id": "CAoSLEFGMVFpcE1saTRBX0taaU9vMHNXSTMzd2p6dXhfRzdiTjF1d1ROUzQ4N3lk"
      }
    }
  ],
  "captureTime": "2019-11-29T04:30:25Z",
  "places": [
    {
      "placeId": "ChIJ-Ta6fhiaQTURHrUsasHtMNs",
      "name": "太宰府歴史スポーツ公園",
      "languageCode": "ja"
    }
  ],
  "thumbnailUrl": "https://lh3.googleusercontent.com/p/AF1QipPZPXJt8EvJnVN_SZ7lwM-U9Bp7ort_ayB5FY3t",
  "viewCount": "390",
  "shareLink": "https://www.google.com/maps/@33.5107581,130.490983,3a,75y,34h/data=!3m4!1e1!3m2!1sAF1QipPZPXJt8EvJnVN_SZ7lwM-U9Bp7ort_ayB5FY3t!2e10",
  "transferStatus": "NEVER_TRANSFERRED"
}


Method: photos.list を使ってみる

Publish APIMethod: photos.listを使ってみました。「試してみる」をクリックするとパラメーターを入力するだけで、このAPIを試すことが可能です。使うにはCredentials(資格情報)として、GoogleのアカウントとAPIキーが必要です。API Explorerを使用する時にAPIキーは不要です。※APIs Explorer よくある質問

filter: "placeId="に続けてプレイスIDを入力します。
languageCode: 日本語ならば"ja"です。
pageSize: 取りあえずデフォルトの100を入力
pageToken: あれば入力してください。
view: プルダウンから取りあえず"BASIC"を選択

EXECUTEをクリックすると、アカウント選択画面が表示されるので選択してください。APIキーを持っていると、APIが実行されて結果が表示されます。※初めての使用では画面が異なるかも知れません。

プレイスIDに登録された自分の写真のリストを得ることが出来ますが、人の目にはちょっと見難いです。テキストとして保存して、数日後に再度実行してみると更新状況が分かるかも知れません。下記は3枚の写真がある名島豊川稲荷神社の例です。相変わらずですが、LatLngPairを見ると同じ場所になっているのが分かります。connentionsを見てみると結合されていることが分かります。targetの数だけ結合しています。
WinMerge日本語版を更新しておこう。


{
  "photos": [
    {
      "photoId": {
        "id": "CAoSLEFGMVFpcE1NVGpTNDBhZHZybEhYd1Z2U2pHdGhZU05wWkttSWV3cXNuQkFH"
      },
      "pose": {
        "latLngPair": {
          "latitude": 33.645629383125133,
          "longitude": 130.42260596824769
        },
        "altitude": "NaN",
        "heading": 3,
        "pitch": "NaN",
        "roll": "NaN"
      },
      "connections": [
        {
          "target": {
            "id": "CAoSLEFGMVFpcE1JdE56dlZlM3FZZHJ4c2dOcWN3RnBmeVQ1MVhLVGFZQUpXZDRq"
          }
        },
        {
          "target": {
            "id": "CAoSLEFGMVFpcE5MNDc5NlkyXzhKbXVOY0hERjBoakhQUXJhVWZCSTA0YWtfcHVS"
          }
        }
      ],
      "captureTime": "2019-12-09T00:00:00Z",
      "places": [
        {
          "placeId": "ChIJHbLZa4GPQTURi3jB7Vjss30",
          "name": "名島豊川稲荷神社",
          "languageCode": "ja"
        }
      ],
      "thumbnailUrl": "https://lh3.googleusercontent.com/p/AF1QipMMTjS40advrlHXwVvSjGthYSNpZKmIewqsnBAG",
      "viewCount": "851",
      "shareLink": "https://www.google.com/maps/@33.6456294,130.422606,3a,75y,3h/data=!3m4!1e1!3m2!1sAF1QipMMTjS40advrlHXwVvSjGthYSNpZKmIewqsnBAG!2e10",
      "transferStatus": "NEVER_TRANSFERRED"
    },
    {
      "photoId": {
        "id": "CAoSLEFGMVFpcE1JdE56dlZlM3FZZHJ4c2dOcWN3RnBmeVQ1MVhLVGFZQUpXZDRq"
      },
      "pose": {
        "latLngPair": {
          "latitude": 33.645629383125133,
          "longitude": 130.42260596824769
        },
        "altitude": "NaN",
        "heading": 15,
        "pitch": "NaN",
        "roll": "NaN"
      },
      "connections": [
        {
          "target": {
            "id": "CAoSLEFGMVFpcE1NVGpTNDBhZHZybEhYd1Z2U2pHdGhZU05wWkttSWV3cXNuQkFH"
          }
        }
      ],
      "captureTime": "2019-12-09T00:00:00Z",
      "places": [
        {
          "placeId": "ChIJHbLZa4GPQTURi3jB7Vjss30",
          "name": "名島豊川稲荷神社",
          "languageCode": "ja"
        }
      ],
      "thumbnailUrl": "https://lh3.googleusercontent.com/p/AF1QipMItNzvVe3qYdrxsgNqcwFpfyT51XKTaYAJWd4j",
      "viewCount": "447",
      "shareLink": "https://www.google.com/maps/@33.6456294,130.422606,3a,75y,15h/data=!3m4!1e1!3m2!1sAF1QipMItNzvVe3qYdrxsgNqcwFpfyT51XKTaYAJWd4j!2e10",
      "transferStatus": "NEVER_TRANSFERRED"
    },
    {
      "photoId": {
        "id": "CAoSLEFGMVFpcE5MNDc5NlkyXzhKbXVOY0hERjBoakhQUXJhVWZCSTA0YWtfcHVS"
      },
      "pose": {
        "latLngPair": {
          "latitude": 33.645629383125133,
          "longitude": 130.42260596824769
        },
        "altitude": "NaN",
        "heading": 93,
        "pitch": "NaN",
        "roll": "NaN"
      },
      "connections": [
        {
          "target": {
            "id": "CAoSLEFGMVFpcE1NVGpTNDBhZHZybEhYd1Z2U2pHdGhZU05wWkttSWV3cXNuQkFH"
          }
        }
      ],
      "captureTime": "2019-12-09T00:00:00Z",
      "places": [
        {
          "placeId": "ChIJHbLZa4GPQTURi3jB7Vjss30",
          "name": "名島豊川稲荷神社",
          "languageCode": "ja"
        }
      ],
      "thumbnailUrl": "https://lh3.googleusercontent.com/p/AF1QipNL4796Y2_8JmuNcHDF0hjHPQraUfBI04ak_puR",
      "viewCount": "301",
      "shareLink": "https://www.google.com/maps/@33.6456294,130.422606,3a,75y,93h/data=!3m4!1e1!3m2!1sAF1QipNL4796Y2_8JmuNcHDF0hjHPQraUfBI04ak_puR!2e10",
      "transferStatus": "NEVER_TRANSFERRED"
    }
  ]
}

このメソッドを見るきっかけになったのは、この投稿(SVTP)です。Valeraさんに感謝。

2020年2月18日火曜日

How to get Panorama ID

Googleマップに投稿した360度写真のPanorama ID(Pano ID)を得る方法です。今日現在起きているバグの為に、黒い画面もしくは別の写真が表示されていても取得可能です。

1.PCのブラウザで該当サムネイルを選択します。黒い画面もしくは他の画面が表示されていても気にしないでください。もちろん正しい写真が表示されている場合も同様です。
Choose a thumbnail

2.「」 で「画像を共有または埋め込む」をクリックします。
Share or embed image
 3.「地図を埋め込む」をクリックします。
Embed a map
 4.「HTMLをコピー」をクリック。この時に別の写真が表示されていても構いません。
COPY HTML
 5.メモ帳等に貼り付けてください。
Paste on notepad
 6.「!1s」と「!2m」の間にPanorama IDは有ります。
The panorama ID can be found between the !1s and !2m. 
7.Panorama IDの利用方法はあなた次第です。ユニークなIDなので、代替機能で近くの写真を表示しません。例えば「これ」が正しく表示されたら、今回の不具合が解消されたことが分かります。

https://www.google.com/maps/@?api=1&map_action=pano&pano=CAoSLEFGMVFpcE5ZUjhEV2dVMmhpZ0FiTU9DQnBFSndrZktTaWZOS2V6Q0owTWFY
参照