0ベースにしたいので、APIを毎回使いたくない!なのでデータを一度取得してキャッシュする方法を検討しました。これにより、頻繁なAPI呼び出しを避けることができます。
方法1: データをローカルに保存
- 初回データ取得とキャッシュ:
- 初回のデータ取得時に、緯度・経度情報をローカルファイル(例えばCSVまたはJSONファイル)に保存します。
- キャッシュからデータを読み込む:
- その後の実行時には、ローカルファイルから緯度・経度情報を読み込みます。
方法2: 定期的なデータ更新
- 定期更新スクリプト:
- 月に一度などの頻度でGoogle Maps APIを呼び出し、最新のデータを取得し、キャッシュファイルを更新します。
以下に具体的な実装例を示します。まず、初回のデータ取得とキャッシュの作成を行い、その後、キャッシュからデータを読み込む方法を示します。
初回データ取得とキャッシュ作成
import pandas as pd
import json
import os
# Excelファイルのパスを指定
file_path = r"C:\mapion_sc\mapionNext.xlsx"
cache_file_path = r"C:\mapion_sc\locations_cache.json"
# 初回データ取得とキャッシュ作成
def create_cache():
df = pd.read_excel(file_path)
locations = []
for index, row in df.iterrows():
try:
url = row.iloc[0] if pd.notna(row.iloc[0]) else ''
title = row.iloc[1] if pd.notna(row.iloc[1]) else ''
lat = row.iloc[2] if pd.notna(row.iloc[2]) else 0
lng = row.iloc[3] if pd.notna(row.iloc[3]) else 0
address = 'データ入力待ち'
phone = 'データ入力待ち'
locations.append({
"url": url,
"title": title,
"lat": lat,
"lng": lng,
"address": address,
"phone": phone
})
except Exception as e:
print(f"行 {index} でエラーが発生しました: {e}")
with open(cache_file_path, 'w', encoding='utf-8') as f:
json.dump(locations, f, ensure_ascii=False, indent=4)
print("キャッシュファイルが作成されました:", cache_file_path)
# キャッシュファイルが存在しない場合に初回キャッシュを作成
if not os.path.exists(cache_file_path):
create_cache()
ここまでは今までと変わりません
キャッシュからデータを読み込んでHTMLファイルを生成
import json
# キャッシュファイルのパスを指定
cache_file_path = r"C:\mapion_sc\locations_cache.json"
# キャッシュからデータを読み込む
with open(cache_file_path, 'r', encoding='utf-8') as f:
locations = json.load(f)
# HTMLファイルの作成
html_content = '''
<!DOCTYPE html>
<html>
<head>
<title>てすてす</title>
<script src="https://maps.googleapis.com/maps/api/js?key=YouareAPIkey"></script>
<style>
#map {
height: 500px;
width: 100%;
}
#info {
margin-top: 10px;
padding: 10px;
border: 1px solid #ccc;
background-color: #f9f9f9;
}
</style>
</head>
<body>
<h1>てすとだ</h1>
<div id="map"></div>
<div id="info">ここに情報が表示されます。</div>
<script>
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: {lat: 35.681236, lng: 139.767125} // 初期位置を東京に設定
});
var locations = ''' + json.dumps(locations, ensure_ascii=False) + ''';
locations.forEach(function(location) {
console.log('Adding marker:', location);
var marker = new google.maps.Marker({
position: {lat: location.lat, lng: location.lng},
map: map,
title: location.title
});
var infowindow = new google.maps.InfoWindow({
content: `<div>
<strong>${location.title}</strong><br>
<a href="${location.url}" target="_blank">ホームページ</a><br>
住所: ${location.address}<br>
電話: ${location.phone}
</div>`
});
marker.addListener('click', function() {
map.setZoom(15);
map.setCenter(marker.getPosition());
infowindow.open(map, marker);
document.getElementById('info').innerHTML =
`<strong>${location.title}</strong><br>
<a href="${location.url}" target="_blank">ホームページ</a><br>
住所: ${location.address}<br>
電話: ${location.phone}`;
});
});
}
google.maps.event.addDomListener(window, 'load', initMap);
</script>
</body>
</html>
'''
# HTMLファイルに書き込む
output_file_path = r"C:\Users\sae202311\Desktop\卒業制作\mapion_sc\locations_map.html"
with open(output_file_path, 'w', encoding='utf-8') as f:
f.write(html_content)
print("HTMLファイルが作成されました:", output_file_path)
Jsonがここできちゃいます!やったね
Share this content: