0ベースにしたいので、APIを毎回使いたくない!なのでデータを一度取得してキャッシュする方法を検討しました。これにより、頻繁なAPI呼び出しを避けることができます。

方法1: データをローカルに保存

  1. 初回データ取得とキャッシュ
    • 初回のデータ取得時に、緯度・経度情報をローカルファイル(例えばCSVまたはJSONファイル)に保存します。
  2. キャッシュからデータを読み込む
    • その後の実行時には、ローカルファイルから緯度・経度情報を読み込みます。

方法2: 定期的なデータ更新

  1. 定期更新スクリプト
    • 月に一度などの頻度で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: