import requests
import time
import json
from datetime import datetime
import os
from concurrent.futures import ThreadPoolExecutor, as_completed
# 設定
API_URL = 'https://api.olostep.com/v1'
API_KEY = '<your_olostep_api_key>'
HEADERS = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {API_KEY}'
}
# Markdown形式でコンテンツを取得する関数
def retrieve_content(retrieve_id, formats):
params = {
"retrieve_id": retrieve_id,
"formats": json.dumps(formats)
}
response = requests.get(f"{API_URL}/retrieve", headers=HEADERS, params=params)
return response.json()
# 前のクロール例から続行
if status_data['status'] == 'completed':
print(f"\nクロール完了!{status_data['pages_count']}ページを取得しました。")
pages_response = requests.get(f'{API_URL}/crawls/{crawl_id}/pages', headers=HEADERS)
pages_data = pages_response.json()
# 出力ディレクトリが存在しない場合は作成
os.makedirs("output", exist_ok=True)
# Markdownコンテンツを収集する準備
markdown_pages = []
total_pages = len(pages_data['pages'])
# ページを並行して処理してMarkdownコンテンツを取得
with ThreadPoolExecutor(max_workers=10) as executor:
# コンテンツ取得のためのフューチャーを作成
future_to_page = {
executor.submit(retrieve_content, page['retrieve_id'], ["markdown"]): page
for page in pages_data['pages']
}
# 完了した結果を処理
for i, future in enumerate(as_completed(future_to_page), 1):
page = future_to_page[future]
url = page['url']
print(f"処理中 {i}/{total_pages}: {url}")
try:
content_data = future.result()
if content_data and "markdown_content" in content_data:
markdown_pages.append({
'url': url,
'title': page['title'],
'markdown_content': content_data['markdown_content']
})
print(f"✓ {url}のMarkdownコンテンツを取得しました")
else:
print(f"⚠ {url}のMarkdownコンテンツがありません")
except Exception as e:
print(f"❌ {url}のコンテンツ取得エラー: {str(e)}")
# すべてのMarkdownコンテンツを単一ファイルに保存
output_file = "output/stripe_blog_markdown.md"
with open(output_file, "w", encoding="utf-8") as f:
for page in markdown_pages:
# タイトルとURLを含むページヘッダーを書き込み
f.write(f"URL: {page['url']}\n\n")
# Markdownコンテンツを書き込み
f.write(f"{page['markdown_content']}\n\n")
# ページ間の区切りを追加
f.write("---\n\n")
print(f"✓ {page['url']}からのMarkdownコンテンツを追加しました")
print(f"\n✅ 処理完了!すべてのMarkdownコンテンツが'{output_file}'に保存されました")
print(f"処理されたページ数: {len(markdown_pages)}")
else:
print(f"クロールがステータス: {status_data['status']}で失敗しました")