こんにちは、hokkyokunです。
自分のサイトにおいて、
A8ネット経由の広告を張り付けているページを全て記載し、提出する必要があります。
詳しくは別記事で書きます。
- wordPress APIを叩いて自分のサイトのURLを全取得
- ①で得たURLリストを全部スクレイピング
自分のサイトだから当然著作権は心配ない - 特定のアンカータグを見つけてリスト化
⇒広告を取得して記事毎にリスト化する - A8ネットの広告IDと紐づけて提出
ここは手動
今回は①のWordPress APIを叩いて自分のサイトの全URLを取得します。
Pythonコード
早速ですが、
サイトの全URLを取得するコードです。
URLだけだとどの記事かピンとこないのでIDとページタイトルも一緒に取得します。
import requests
import time
def fetch_posts_data(base_url, endpoint='/wp-json/wp/v2/posts', per_page=10):
"""
WordPress REST APIを使用して投稿のURL、タイトル、IDを取得し、
それらをPandas DataFrameにして返す。
"""
posts_data = []
page = 1
while True:
time.sleep(1)
response = requests.get(f"{base_url}{endpoint}?per_page={per_page}&page={page}")
if response.status_code != 200:
break
data = response.json()
if not data:
break
for post in data:
post_info = {
'id': post['id'],
'title': post['title']['rendered'],
'url': post['link']
}
posts_data.append(post_info)
print(page)
print(posts_data)
page += 1
return pd.DataFrame(posts_data)
自分のサイトで試してみます
さっそく自分のサイトのURLを取得してみます。
#SITE_NAMEはご自身のドメインを入れてください
# 「なんとか.com」のことです。
df=fetch_posts_data(SITE_NAME)
print(df)
サイトURLが取得できました。
IDは念のため伏せておきますが、ちゃんと取得出来ています。
【注意】人様のサイトに迷惑をかけてはいけない
今回のコードは特にキーを必要としていません。
(APIを使用するためにはキーの発行が必須の場合もあります)
サイトのURLはパブリックな情報という位置づけなのでしょう。
やろうと思えばどのウェブサイトでも試すことができます。
(ブロックする措置をとっていない場合)
ただし、リクエストを送るということは
サーバーに少なからず負担をかけることになります。
誰か他人のサイトに過剰な負荷をかけることはマナー違反です。
最悪、訴えられる可能性もあります。
節度を持って自己責任で行ってください。
個人的には人様のサイトに試すのはおすすめしません。
Pythonができるのは大きい
何はともあれ、ちょこっとプログラミングができるようになるだけで
可能性は広がります。
今回のA8さんの仕様変更でも
「誰かが何とかしてくれる」ではなく、
「プログラムでなんとかなるか」という思考になれるのは大きいです。
そして、プログラミング学習は独学でも学ぶことができますが、
時間が多くかかることも事実です。
書籍や動画、プログラミングスクールなど有料コンテンツもたくさんあります。
お勧めは動画コンテンツでの学習です。
プログラミングは書籍だとPCの操作などでわかりにくいところもありますので
連続性のあるコンテンツの方が学習効率が高いです。
動画コンテンツはUdemy一択です。
Udemyの公式サイトはこちらです。
また、質問や相談できる環境を作ると学習効率や質はさらに上がります。
特に独学だと知識の範囲が偏りがちなので、知らないばかりに複雑なコードを書いてしまうことがよくあるので、聞ける環境を作るのはおすすめです。
SAMURAI TERAKOYAは
月額2980円で質問ができる環境を作ることができます。
関連リンク
楽天API
ワードプレス自動化