Twitterから緯度・経度取得のメモ


1. 概要

 Twitterには位置情報を付けて投稿する事が出来ます。この位置情報はJSONとして取得する事が出来ます。よってそのJSONから緯度・経度を取ってKMLファイルを作れば、Google Mapなどにマッピングする事が可能です。歩きの途中で複数回投稿していれば、トラッキング経路のマップが作れるという事になりますが、果たしてそれが出来るか検証します。

2. JavaとTwitter4J

 環境はPCです。私の場合ですとWindows8.1(2016年現在はWindows10)のLet's noteですが、Windows7以前でも当然問題はありません。先ずJava を入れますが下記サイトからダウンロードできます。

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html (Java download)

http://docs.oracle.com/javase/7/docs/api/ (APIリスト) 

続いてはTwitter4J。これはTwitter API1.1を使うためのラッパですが、下記URLよりダウンロード出来ます。 

http://twitter4j.org/ja/index.html (Twitter4J home)

 最近の若い方々だと合わせてEclipseとかを使う訳ですが、当方はコマンドライン重視で使いません。その為CLASSPATHの設定などは自分でする必要があります。なのでお勧めは出来ないですが、CLASSPATHの設定自体はコマンドラインのsetコマンドで簡単に出来ます。

CLASSPATHの設定

set classpath= でtwitter4j-3.0.5\binとtwitter4j-3.0.5\libを指定

3. OAuth認証

  Twitter自身はID+passwordで認証して使いますが、アプリケーションの認証はOAuth認証というのを使っています。よってこれの登録を下記URLで行なって、キーを取得します。

https://dev.twitter.com/apps (Twitterアプリの登録)

https://support.twitter.com/articles/252401-# (アプリ登録help)

  Twitter4Jの場合binディレトクリーにあるtwitter4j.propertiesにこの情報を書きます。(XXXXXを書き換える。)

oauth.consumerKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
oauth.consumerSecret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
oauth.accessToken=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
oauth.accessTokenSecret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
jsonStoreEnabled=true

 尚、jsonStoreEnabled=にtrueを指定しないとJSONの保管は出来ません。

4. JSONへの保管と解析

 Twitter4Jには沢山のサンプルプログラムが付いています。その中にSaveRawJSONというのが有り実行すれば、JSONデータが保管されます。(元のままならbin\statusesの下) このJSONデータの先頭の方を見ると次のような書き込みがあります。(改行を追加しています。)

"contributors":null,"text":"日本橋なう。多分今年最後でしょう。 http://t.co/uaWugqUztH","geo":{"type":"Point",
"coordinates":[35.6840982,139.7744721]},"retweeted":false,"in_reply_to_screen_name":null,"possibly_sensitive":false,
"truncated":false,"lang":"ja","entities":{"symbols":[],"urls":[],"hashtags":[],"media":[{"sizes":{"thumb":{"w":150,"resize":"crop",
"h":150},"small":{"w":340,"resize":"fit","h":191},"large":{"w":1024,"resize":"fit","h":576},"
medium":{"w":600,"resize":"fit","h":338}},"id":417182216146276353,
"media_url_https":"https://pbs.twimg.com/media/BcohA-gCUAE130V.jpg",
"media_url":"http://pbs.twimg.com/media/BcohA-gCUAE130V.jpg",
"expanded_url":"http://twitter.com/YujiOzawa/status/417182216427302912/photo/1",
"indices":[18,40],"id_str":"417182216146276353","type":"photo","display_url":"pic.twitter.com/uaWugqUztH",
"url":"http://t.co/uaWugqUztH"}],"user_mentions":[]},"in_reply_to_status_id_str":null,"id":417182216427302912
,"source":"<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android<\/a>",
"in_reply_to_user_id_str":null,"favorited":false,"in_reply_to_status_id":null,"retweet_count":0
,"created_at":"Sun Dec 29 06:36:05 +0000 2013",..続く

 JSONにはcoordinatesとして緯度・経度情報が書かれていますので、これを取得すればGoogle Map等へマッピングが可能です。

 マッピング時には少なくとも時刻情報を付けたいところですが、時刻はGMTで欧米スタイルの書き方でした。よってこれはJST(日本標準時間)に9時間ずらし、書式も変えたい所です。Twitter4Jにはこれを変えるパラメタが有るのか良く判りませんでしたので、当方は自分で書き換える事としました。

 当初はJavaのSimpleDateFormatクラスを利用しようとしました。LocaleはUSからJAPANの変更で時差変換ですが、何故かGMT15時以降の時1日ずれる(翌日ではなく翌々日になる)現象が出て解決しませんでした。よってこの解決策が判るまでは古典的なScript (RubyやPerl以前のものという意)で回避する事としました。まぁC言語やJavaで独自コーディングでも良かった訳ですが、製作時間を考慮しました。

5. KML

 JSONはレコードつまりTweet単位です。KMLは位置情報を当然複数指定なので、JSONからどうKMLにまとめるかは問題です。この文章を読まれた方は是非こんな良い方法がありますと教えて欲しいものです。ともあれ、まとめて出来るのは次のようなものです。

<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Folder>
<name>足跡</name>
<Placemark>
<name>2013年12月29日(日) 09:52:43</name>
<description>
<![CDATA[
いつもの東横線で新宿に向かいます。
]]>
</description>
<Point>
<coordinates>139.6286389,35.4882124,-1</coordinates>
</Point>
</Placemark>
<Placemark>
<name>2013年12月29日(日) 10:47:17</name>
<description>
<![CDATA[
何でしょうこれは? http://t.co/gI5FSHvNYC
<a href="http://pbs.twimg.com/media/Bcne6eDCUAEwkl4.jpg:large">http://pbs.twimg.com/media/Bcne6eDCUAEwkl4.jpg</a>
<img src="http://pbs.twimg.com/media/Bcne6eDCUAEwkl4.jpg" class="tl-image" style="max-height:150px;max-width:150px;">
]]>
</description>
<Point>
<coordinates>139.6860812,35.6815945,-1</coordinates>
</Point>
</Placemark>
<Placemark>
<name>2013年12月29日(日) 15:36:05</name>
<description>
<![CDATA[
日本橋なう。多分今年最後でしょう。 http://t.co/uaWugqUztH
<a href="http://pbs.twimg.com/media/BcohA-gCUAE130V.jpg:large">http://pbs.twimg.com/media/BcohA-gCUAE130V.jpg</a>
<img src="http://pbs.twimg.com/media/BcohA-gCUAE130V.jpg" class="tl-image" style="max-height:150px;max-width:150px;">
]]>
</description>
<Point>
<coordinates>139.7744721,35.6840982,-1</coordinates>
</Point>
</Placemark>
<Placemark>
<name>2013年12月29日(日) 15:38:13</name>
<description>
<![CDATA[
魚市場発祥の地 http://t.co/irTZeJl6uk
<a href="http://pbs.twimg.com/media/BcohgB4CMAA9goY.jpg:large">http://pbs.twimg.com/media/BcohgB4CMAA9goY.jpg</a>
<img src="http://pbs.twimg.com/media/BcohgB4CMAA9goY.jpg" class="tl-image" style="max-height:150px;max-width:150px;">
]]>
</description>
<Point>
<coordinates>139.7745904,35.6844195,-1</coordinates>
</Point>
</Placemark>
<Placemark>
<name>2013年12月29日(日) 16:28:46</name>
<description>
<![CDATA[
さて横浜へ帰ります。本日はそれなりに寒く、掘り出し物探し等はパスでした。
]]>
</description>
<Point>
<coordinates>139.7399816,35.6311604,-1</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>

 因みに私はJSONのmedia_url_httpsに書かれていた情報も追記しています。しかしこのmedia_url_httpsにはTwitter本家に画像アップした場合しか書き込まれないようです。よってTwitpic等にアップされている場合は現時点ではどのような対応が可能なのか判ってません。

https://maps.google.co.jp/maps/ms?msa=0&msid=200625679531621520303.0004eeb33e6c73f73db30 (上のKMLをGoogle mapに登録)


6. 新Google map対応 (2015.01.02)

 2014年の11月にGoogle mapsは突如として新mapに全面移行しました。それまでは旧mapも手間は掛かるものの使えたのですが、その選択肢はなくなりました。新mapは勿論良い面もあるのですが、例えば下記のような問題があります。従来下のように見えていたものが、

コメントが見えずに下のように時刻のみになってしまいました。これでは個々バルーンを表示しないと中身は見えない状態となり使い勝手が良くありません。

 これの対策として1年振りにプログラムを直し、結果としてkmlを下のように変えました。

<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Folder>
<name>足跡</name>
<Placemark>
<name>12/29 09:52 いつもの東横線で新宿に向かいます。</name>
<description>
<![CDATA[
いつもの東横線で新宿に向かいます。
]]>
</description>
<Point>
<coordinates>139.6286389,35.4882124,-1</coordinates>
</Point>
</Placemark>
<Placemark>
<name>12/29 10:47 何でしょうこれは? http://t.co/gI5FSHvNYC</name>
<description>
<![CDATA[
何でしょうこれは? http://t.co/gI5FSHvNYC
<a href="http://pbs.twimg.com/media/Bcne6eDCUAEwkl4.jpg:large">http://pbs.twimg.com/media/Bcne6eDCUAEwkl4.jpg</a>
<img src="http://pbs.twimg.com/media/Bcne6eDCUAEwkl4.jpg" class="tl-image" style="max-height:150px;max-width:150px;">
]]>
</description>
<Point>
<coordinates>139.6860812,35.6815945,-1</coordinates>
</Point>
</Placemark>
<Placemark>
<name>12/29 15:36 日本橋なう。多分今年最後でしょう。 http://t.co/uaWugqUztH</name>
<description>
<![CDATA[
日本橋なう。多分今年最後でしょう。 http://t.co/uaWugqUztH
<a href="http://pbs.twimg.com/media/BcohA-gCUAE130V.jpg:large">http://pbs.twimg.com/media/BcohA-gCUAE130V.jpg</a>
<img src="http://pbs.twimg.com/media/BcohA-gCUAE130V.jpg" class="tl-image" style="max-height:150px;max-width:150px;">
]]>
</description>
<Point>
<coordinates>139.7744721,35.6840982,-1</coordinates>
</Point>
</Placemark>
<Placemark>
<name>12/29 15:38 魚市場発祥の地 http://t.co/irTZeJl6uk</name>
<description>
<![CDATA[
魚市場発祥の地 http://t.co/irTZeJl6uk
<a href="http://pbs.twimg.com/media/BcohgB4CMAA9goY.jpg:large">http://pbs.twimg.com/media/BcohgB4CMAA9goY.jpg</a>
<img src="http://pbs.twimg.com/media/BcohgB4CMAA9goY.jpg" class="tl-image" style="max-height:150px;max-width:150px;">
]]>
</description>
<Point>
<coordinates>139.7745904,35.6844195,-1</coordinates>
</Point>
</Placemark>
<Placemark>
<name>12/29 16:28 さて横浜へ帰ります。本日はそれなりに寒く、掘り出し物探し等はパスでした。</name>
<description>
<![CDATA[
さて横浜へ帰ります。本日はそれなりに寒く、掘り出し物探し等はパスでした。
]]>
</description>
<Point>
<coordinates>139.7399816,35.6311604,-1</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>

 上のkmlを登録したGoogle mapが下のものです。

https://www.google.com/maps/d/viewer?mid=z1C4dlGJyCE8.kVaTFUgKlttw

 これでもまだ前のものの方が良かったように思うのですが、コメントが全く見えないよりはマシという事で今後はこちらのKMLを使う事としました。


7. Google Mapまたも変更 (2015.10.10)

 最近グーグルはまたもマップの表示を変えました。(実際のマップ)

 これで従来のKMLが使えない訳ではないものの、以前のようにバルーンの表示されるスタイルとどちらが良いかは人それぞれでしょう。個人的には前の方が良かったと思います。まぁ無料なので文句は言いませんが、次はいつ何を変更して来るのか?


8. Google Map またまた仕様変更 (2016.02.16)

 2月12日からまたマイマップ回りの仕様を変えたらしく、11日まで表示されていた写真がマイマップで出てこなくなりました。14日の朝よりKMLの変更箇所を確認していました。

 変わった所は太字のところですが、ExtendedDataというタグで写真表示を明示する必要が発生したようです。

<?xml version='1.0' encoding='UTF-8'?>
<kml xmlns='http://www.opengis.net/kml/2.2'>
<Document>
<name>oztest</name>
<Folder>
<name>足跡</name>
<Placemark>
<name>2/13 10:14 これ見ます。 https://t.co/VvOMiztJpW</name>
<description><![CDATA[<img src="https://lh3.googleusercontent.com/proxy/RKirYOI8IoFRYwoaHbCyie7uTLaaC0idrKZHCqH2z1wMo_tMvr8MyTc2sKJaxN5WwgQAznIphr6kbEc6i8EiP7oFoKprL9k1ws7HlbJYNRKODKbEeTmXwiwZyBGt2AeEYSGofW7bZz8dXcI76xrcxkQJfQGMeRFmKxBA1mOQO-vzyrBbY0XiF0lGgg" height="200" width="auto" /><br><br>これ見ます。 https://t.co/VvOMiztJpW http://pbs.twimg.com/media/CbDpK25UsAA5aUc.jpg (http://pbs.twimg.com/media/CbDpK25UsAA5aUc.jpg:large)]]></description>
<ExtendedData>
<Data name='gx_media_links'>
<value>https://lh3.googleusercontent.com/proxy/RKirYOI8IoFRYwoaHbCyie7uTLaaC0idrKZHCqH2z1wMo_tMvr8MyTc2sKJaxN5WwgQAznIphr6kbEc6i8EiP7oFoKprL9k1ws7HlbJYNRKODKbEeTmXwiwZyBGt2AeEYSGofW7bZz8dXcI76xrcxkQJfQGMeRFmKxBA1mOQO-vzyrBbY0XiF0lGgg</value>
</Data>
</ExtendedData>

<Point>
<coordinates>139.773503,35.716649,0.0</coordinates>
</Point>
</Placemark>
<Placemark>
<name>2/13 10:29 国立博物館</name>
<description><![CDATA[<img src="http://pbs.twimg.com/media/CbDsmTZUEAArI4v.jpg" height="200" width="auto" /><br><br>http://pbs.twimg.com/media/CbDsmTZUEAArI4v.jpg (http://pbs.twimg.com/media/CbDsmTZUEAArI4v.jpg:large)]]></description>
<ExtendedData>
<Data name='gx_media_links'>
<value>http://pbs.twimg.com/media/CbDsmTZUEAArI4v.jpg</value>
</Data>
</ExtendedData>

<Point>
<coordinates>139.77481,35.716571,0.0</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>

 判ってしまうとどうでも良い事のようですが、そこが原因と特定するのに半日潰れました。まぁGoogleさんは無料で使っているので文句は言わない事とします。


9.Google map マーカーがずれる(2018.04.18)

 一昨年の仕様変更から二年経って、今度はマーカーのずれです。

 気付いたのは数日前ですが、以前はトラッキングの赤線に乗っていたマーカーが上に1cmほどずれるようになりました。しかし地図を最大に拡大すると、本来の位置に表示されるようで、Googleの不具合ではなく仕様変更なのだろうと考えています。

 仕様変更だとして、その理由は何なのか良く判りません。マーカー直下の地図が見れなくなるのを防いでいるのかも知れませんが、マーカーの示すポイントがはっきりしなくなり、利用者にとってデメリットに思われます。

 情報不足で、恒久的仕様変更なのか一時的なのかも判らず、また回避方法も判りません。無料で使っている事でもあり、従来同様Googleにクレームはしないものの、仮に恒久的仕様変更であればかなり残念なものと考えます。

2018.04.20追記 直ったようです。

10. 以前のGoogleマイマップへリンク出来ない現象 (2022.02.24)

 当サイトではマイマップで作ったマップへのリンクが多数有りますが、その一部にリンク出来ない現象が出ています。正確にいうとWebMasterは自分のマップなのでアクセスは出来るのですが、本人以外はアクセス出来ないケースがあります。Googleマップは時々仕様を変えるのでその可能性も有りますが、もし単なる間違いならばGoogle側に早く直して欲しいところです。

 当初は2014年以前に作ったマップでのみ発生していたので、その辺の問題かとも思いましたが違いました。最近のマップでもリンクアドレスの表現によってはアクセス出来ません。ネットで調べると少なくとも2月21日から出ている現象で、多くの他のGoogleマイマップユーザーでも影響が出ているようです。

 Googleが元に戻してくれる可能性はゼロではないと思いますが、余り期待はしていません。なので止むを得ず直そうと思いますが、どの程度それが有るのかもまだ把握は出来ておらず、完全に直すのにはかなり時間が掛かりそうです。

→ その後この現象はログインした状態でChromeを使っている場合には発生しない事が判りました。しかしそれでは解決になりません。Firefoxや他のブラウザを使っているユーザーも多いからです。

11. Twitter位置情報取得の終焉 (2023.01.28)

 イーロン・マスクがTwitter社を買収した結果こんな事になるとは想像もしていませんでした。彼は買収後ドナルド・トランプのアカウント復活といった事もしましたが、最も大胆に実施したのは会社の黒字化のために、

1. 社員の削減 (既に5分の1になったとの報道)

2. Twitter Blue(バッチ表示)の有料化

3. サードパーティの締出し

 といったものです。Twitter公式Webや公式アプリは使い勝手が良くない事も有って多くの方はサードパーティのものを使っていましたし、当方もそうでした。そのサードパーティ製のものはTwitter社が請けている広告は表示しません。恐らくイーロン・マスクはサード・パーティのものを締め出せば、公式Webや公式アプリの利用が増えて広告収入が増えると考えてそのようにしたのでしょう。

 当方は位置情報を付けてツイートする時はサードパーティ製品(Janetter等)を利用してきましたが、残念ながらこれは使えなくなってしまいました。仕方なく公式アプリでと思ったのですが、位置情報付加が出来ません。有料のプレミアムで公式を使えば使えるのかも知れませんが、コストを掛けてまでそうする気は有りません。よってTwitter社が考え直すでもしてくれない限り位置情報付きツイートは出来ない事となり、結果としてTwitterの位置情報取得は出来ない状態です。大変残念ですが、元々無料で使っているものでもあり、諦めるものとします。

(2023.02.02追記) iOS版公式アプリで位置情報付加が出来なかったもののAndroid版を試したら出来ました。なので終焉とは言い切れないのですが、特に今後継続利用する意欲は薄らいでいます。

(2023.04.29) その後APIの使用は何回か延長されてきましたが本日確認したところ利用が出来なくなっていました。なので有料APIを使わない前提ではTwitterから位置情報は取れないのが現状です。

Home


2014.01

参考URL

https://qiita.com/niwasawa/items/18b816fa1338e1ab17a7