import requests
import json
import time
import itertools
import pandas as pd
import sys
# -----------------------------
# 1. ベースキーワード
# -----------------------------
base_keyword = "iphone"
# -----------------------------
# 2. 使用する文字セット(a-z, 0-9, ひらがな)
# -----------------------------
chars = [chr(c) for c in range(97, 123)] # a-z
chars += [str(i) for i in range(10)] # 0-9
kana = list("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん")
chars += kana
N = len(chars) # 82
# -----------------------------
# 3. サフィックス生成
# -----------------------------
# 1文字サフィックス(82)
suffixes_1 = chars
# 2文字サフィックス(82 × 82 = 6724)
suffixes_2 = [''.join(c) for c in itertools.product(chars, repeat=2)]
# 重要3文字サフィックス(必要に応じて追加可能)
important_3chars = [
# --- 例:ブランド・検索語に強い3文字を200個程度 ---
"pro", "max", "air", "new", "big", "led", "gel", "spf", "uvc",
"ess", "set", "men", "sun", "dry", "fit", "oil", "usa",
"med", "sys", "app", "rev", "hot", "cool", "eco", "low",
"box", "pad", "map", "cam", "mic", "bag", "cos", "kit",
"300", "400", "500", "600", "aaa", "bbb",
# 必要に応じて増やす(200前後が最適)
]
# 重要3文字は自由に拡張可能
suffixes_3 = important_3chars
# 全サフィックスを統合(空文字は含めない)
suffixes = suffixes_1 + suffixes_2 + suffixes_3
total_suffixes = len(suffixes)
# -----------------------------
# 出力上限
# -----------------------------
output_limit = 30000
result_set = set()
print(f"🔍 1文字サフィックス: {len(suffixes_1)}")
print(f"🔍 2文字サフィックス: {len(suffixes_2)}")
print(f"🔍 重要3文字サフィックス: {len(suffixes_3)}")
print(f"🔍 合計サフィックス: {total_suffixes}\n")
# -----------------------------
# 4. サジェスト取得ループ
# -----------------------------
try:
for i, suffix in enumerate(suffixes):
query = f"{base_keyword} {suffix}"
url = f"http://suggestqueries.google.com/complete/search?output=firefox&hl=ja&q={query}"
try:
response = requests.get(url)
if response.status_code == 200:
suggestions = json.loads(response.text)[1]
result_set.update(suggestions)
except Exception as e:
print(f"\n⚠ エラー発生: {e}")
# 進捗表示
progress = (i + 1) / total_suffixes * 100
sys.stdout.write(
f"\r⏳ {i+1}/{total_suffixes} 件処理中... "
f"({progress:.2f}%) | 現在の取得語数: {len(result_set)}"
)
sys.stdout.flush()
time.sleep(0.25)
if len(result_set) >= output_limit:
print(f"\n🔚 上限 {output_limit} 件に達したため終了します。")
break
except KeyboardInterrupt:
print("\n\n⛔ 中断されました。途中結果を保存します...")
# -----------------------------
# 5. 保存処理
# -----------------------------
final_keywords = sorted(list(result_set))[:output_limit]
df = pd.DataFrame(final_keywords, columns=["キーワード"])
df.to_csv("関連キーワード_途中保存.csv", index=False, encoding='utf-8-sig')
print(f"\n✅ 保存完了: {len(final_keywords)} 件を保存しました。\n")