Created
September 15, 2025 11:42
-
-
Save deton/39f9f681a63fe83edcea41fa97097e73 to your computer and use it in GitHub Desktop.
特Pの駐車場検索JSONレスポンスをCSVに変換、1時間あたりの駐車料金を抽出するスクリプト
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import csv | |
| import io | |
| import re | |
| import sys | |
| sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') | |
| sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') | |
| def get_price(s): | |
| def per_hour(yen, per): | |
| return yen * 60.0 / per | |
| m = re.search(r"(\d+)円.?(\d+)分", s) | |
| if m: | |
| yen = int(m.group(1)) | |
| per = int(m.group(2)) | |
| return per_hour(yen, per) | |
| m = re.search(r"(\d+)分[^\d]?(\d+)円", s) | |
| if m: | |
| per = int(m.group(1)) | |
| yen = int(m.group(2)) | |
| return per_hour(yen, per) | |
| m = re.search(r"(\d+)分[^\d]?¥(\d+)", s) | |
| if m: | |
| per = int(m.group(1)) | |
| yen = int(m.group(2)) | |
| return per_hour(yen, per) | |
| m = re.search(r"24時間[^\d]?(\d+)円", s) | |
| if m: | |
| yen = int(m.group(1)) | |
| return yen | |
| m = re.search(r"24時間[^\d]?¥(\d+)", s) | |
| if m: | |
| yen = int(m.group(1)) | |
| return yen | |
| m = re.search(r"(\d+)時間[^\d]?¥(\d+)", s) | |
| if m: | |
| per = int(m.group(1)) | |
| yen = int(m.group(2)) | |
| return per_hour(yen, per * 60) | |
| m = re.search(r"(\d+)時間[^\d]?(\d+)円", s) | |
| if m: | |
| per = int(m.group(1)) | |
| yen = int(m.group(2)) | |
| return per_hour(yen, per * 60) | |
| m = re.search(r"(\d+)円[^\d]?(\d+)時間", s) | |
| if m: | |
| yen = int(m.group(1)) | |
| per = int(m.group(2)) | |
| return per_hour(yen, per * 60) | |
| m = re.search(r"1日[^\d]?(\d+)円", s) | |
| if m: | |
| yen = int(m.group(1)) | |
| return yen | |
| m = re.search(r"1日1回[^\d]?(\d+)円", s) | |
| if m: | |
| yen = int(m.group(1)) | |
| return yen | |
| return None | |
| def read_csv(fname): | |
| data = [] | |
| with open(fname, encoding="utf-8") as f: | |
| reader = csv.DictReader(f) | |
| for row in reader: | |
| # print(f'{get_price(row["feature"])}, {row["feature"]}') | |
| row["price"] = get_price(row["feature"]) | |
| del row["is_toku_p"] | |
| data.append(row) | |
| with open(f"{fname[:-4]}_price.csv", "w", newline="\n", encoding="utf-8") as f: | |
| writer = csv.DictWriter(f, ["id", "parking_lot", "price", "latitude", "longitude", "name", "feature"]) | |
| writer.writeheader() | |
| writer.writerows(data) | |
| if __name__ == "__main__": | |
| for fname in sys.argv[1:]: | |
| read_csv(fname) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # for f in json/*.json; do ./tocsv.sh <$f >${f//json/csv}; done | |
| jq -r '.content[]|[.id,.is_toku_p,.parking_lot,.latitude,.longitude,.name,(.feature|gsub("\n";";"))]|@csv' | |
| # grep -h '^[0-9]*,false,[0-9]' csv/*.csv | sort -t, -k 6 -u >all.csv |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment