はじめに
本記事では、ブログやウェブサイトでよく見られるブログカード機能を実装するために、外部のウェブページからそのページのメタデータ(タイトル、OG タグで指定された画像や説明文など)を取得する方法を紹介します。
ブログカードとは以下のようなものです。
必要なツールとライブラリ
- Python: バージョンは 3.x を推奨
- requests: HTTP リクエストを簡単に送信するためのライブラリ
- BeautifulSoup: HTML および XML を解析するためのライブラリ
依存関係のインストール
必要なライブラリをインストールします。
pip3 install requests beautifulsoup4
fetch_url_metadata 関数の実装
import requests
from bs4 import BeautifulSoup
# 引数として URL を受け取り、その URL から取得したメタデータを含む辞書を返す
def fetch_url_metadata(url):
try:
# 指定された URL に対して HTTP GET リクエストを送信し、レスポンスを取得
response = requests.get(url)
if response.status_code != 200:
# リクエストが失敗した場合、空のメタデータを返す
return {
"url": "",
"title": "",
"og_title": "",
"og_image": "",
"og_site_name": "",
"og_description": "",
}
# レスポンスを UTF-8 でデコードし、BeautifulSoup で解析可能な形式に変換
content = response.content.decode('utf-8', errors='ignore')
soup = BeautifulSoup(content, 'html.parser')
# メタデータの抽出
title = soup.title.string if soup.title else ''
og_title = soup.find('meta', property='og:title')
og_image = soup.find('meta', property='og:image')
og_site_name = soup.find('meta', property='og:site_name')
og_description = soup.find('meta', property='og:description')
metadata = {
"url": url,
"title": title,
"og_title": og_title['content'] if og_title else '',
"og_image": og_image['content'] if og_image else '',
"og_site_name": og_site_name['content'] if og_site_name else '',
"og_description": og_description['content'] if og_description else '',
}
return metadata
except:
# エラーが発生した場合、空のメタデータを返す
return {
"url": "",
"title": "",
"site_img": "",
"og_title": "",
"og_image": "",
"og_site_name": "",
"og_description": "",
}
# 動作確認
if __name__ == '__main__':
url = 'https://example.com'
metadata = fetch_url_metadata(url)
print(metadata)
動作確認
python3 get_meta_data.py
{'url': 'https://example.com', 'title': 'Example Domain', 'og_title': '', 'site_img': '', 'og_image': '', 'og_site_name': '', 'og_description': ''}
外部サイトのコンテンツを取得する際の注意点
-
利用規約の遵守
外部サイトのコンテンツを取得する前に、そのサイトの利用規約を確認し、遵守する必要があります。 -
法的な規制の遵守
コンテンツの使用に関する法的な制約や著作権についても留意する必要があります。 -
クロールの頻度制限
外部サイトからのデータを頻繁に取得する場合、そのサイトのサーバーに負荷をかけることになります。robots.txt
ファイルに記載されたクローリングの許可や制限を尊重する必要があります。 -
セキュリティ
外部サイトからのデータを処理する際には、セキュリティ上のリスクにも留意してください。不正な入力や XSS 攻撃を防ぐ必要があります。