Nikon COOLPIXP6000のGeoTagはExifに入るため、
そのままflickrに写真をUploadしてもGeoTagがつかないので、Pythonを使ってFlickrに公開している
Nikon COOLPIXP6000のGeoTagを一括登録するスクリプトを書いてみた。
ちなみに
Flickr APIのキーの取得にと、
flickrapiのインストールが必要です。
※NikonP6000を修理に出したところ のGeoTagの仕様が変わったようです。Versionによっては動作しないものがあります。詳しくは
こちらから
- import flickrapi
-
-
- api_key = 'XXXXXXXXXXXXXXXXXXXX'
- secret_key = 'YYYYYYYYYYYYYYY'
- my_id = 'ZZZZZZ@N00'
-
- flickr = flickrapi.FlickrAPI(api_key,secret_key)
-
-
- (token, frob) = flickr.get_token_part_one(perms='write')
- if not token: raw_input("Press ENTER after you authorized this program")
- flickr.get_token_part_two((token, frob))
-
-
- search = flickr.photos_getWithoutGeoData( sort='date-posted-desc')
- for photo in search.photos[0].photo:
-
- getexif = flickr.photos_getExif(photo_id = photo['id'] )
- if( getexif.photo):
- lat = lon = ""
- for exif in getexif.photo[0].exif:
- if( exif['label'] == 'Latitude' ):
- lat = ( exif.raw[0].text )
- if( exif['label'] == 'Longitude' ):
- lon = ( exif.raw[0].text )
- if( exif['label'] == 'Altitude' ):
- alt = ( exif.raw[0].text )
- if( exif['label'] == 'GPS Time (atomic clock)' ):
- time = ( exif.raw[0].text )
- if( exif['label'] == 'Direction of Image' ):
- dire = ( exif.raw[0].text )
-
-
- a = lat.split(",\n")
- b = lon.split(",\n")
- if( (len(a) == 3 and len(b) == 3 ) and (lat != '0/0,\n0/0,\n0/0' and lon != '0/0,\n0/0,\n0/0' ) ):
-
-
- da = a[0].split("/")
- ma = a[1].split("/")
- lat = int(da[0]) +float( ma[0] ) /float(ma[1]) / 60
- db = b[0].split("/")
- mb = b[1].split("/")
- lon = int(db[0]) +float( mb[0] ) /float(mb[1]) / 60
- print "http://maps.google.co.jp/?ie=UTF8&ll="+str(lat)+","+str(lon)+"&spn=0.001073,0.002006&z=19"
- flickr.photos_geo_setLocation(photo_id = photo['id'],lat=lat,lon = lon)
import flickrapi
api_key = 'XXXXXXXXXXXXXXXXXXXX'
secret_key = 'YYYYYYYYYYYYYYY'
my_id = 'ZZZZZZ@N00'
flickr = flickrapi.FlickrAPI(api_key,secret_key)
#auth
(token, frob) = flickr.get_token_part_one(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))
search = flickr.photos_getWithoutGeoData( sort='date-posted-desc')
for photo in search.photos[0].photo:
#print photo['id'] + " " + photo['title']
getexif = flickr.photos_getExif(photo_id = photo['id'] )
if( getexif.photo):
lat = lon = ""
for exif in getexif.photo[0].exif:
if( exif['label'] == 'Latitude' ):
lat = ( exif.raw[0].text )
if( exif['label'] == 'Longitude' ):
lon = ( exif.raw[0].text )
if( exif['label'] == 'Altitude' ):
alt = ( exif.raw[0].text )
if( exif['label'] == 'GPS Time (atomic clock)' ):
time = ( exif.raw[0].text )
if( exif['label'] == 'Direction of Image' ):
dire = ( exif.raw[0].text )
a = lat.split(",\n")
b = lon.split(",\n")
if( (len(a) == 3 and len(b) == 3 ) and (lat != '0/0,\n0/0,\n0/0' and lon != '0/0,\n0/0,\n0/0' ) ):
#print lat
#print lon
da = a[0].split("/")
ma = a[1].split("/")
lat = int(da[0]) +float( ma[0] ) /float(ma[1]) / 60
db = b[0].split("/")
mb = b[1].split("/")
lon = int(db[0]) +float( mb[0] ) /float(mb[1]) / 60
print "http://maps.google.co.jp/?ie=UTF8&ll="+str(lat)+","+str(lon)+"&spn=0.001073,0.002006&z=19"
flickr.photos_geo_setLocation(photo_id = photo['id'],lat=lat,lon = lon)
プログラムの簡単な説明
flickrにあがっているGeo情報が付いていない画像をとってきてExIfにGeoTagがあるかどうかをチェック。
GeoTagが付いている場合は、Flickr形式に変換して、FlickrにGeo情報を付与。
※2009/03/03 修正 flickrにはAPIを利用しなくてもGeoTagを自動で付与する
オプションがあります。