Simple Life Navi

シンプルで楽しい暮らしのための、お得な情報ブログ

~ お知らせ ~
『Simple Life Navi』
気になるカテゴリを選べます

ーーー New Post ーーー

はてなブログ A8.netの広告掲載URLの抽出・管理 csv作成プログラム【簡単ツール】

はてなブログ用 A8ネットの広告掲載URL自動収集ツール

はてなブログ用 A8ネットの広告掲載URL自動収集ツール

みなさんこんにちは、シンプルライフナビです。

はてなブログの収益化には、アフィリエイトやGoogleアドセンスの利用が欠かせません。

A8.net もしもアフィリエイトは、ブログ初心者も利用できる人気のアフィリエイトプロバイダー(ASP)です。

ところが、2023年10月の【ステマ規制】の開始により、A8ネットから【重要】広告掲載URLの提出開始についてのお知らせ が出されました。

ステマ規制に伴い、広告主様側では広告掲載コンテンツの確認・管理を行っております。(略)メディア管理画面で提供している「広告掲載URL管理」の機能を使い、広告掲載URLのご提出をお願い致します。(略)

メディア会員の皆様には、お手数をおかけいたしますが、法律順守およびアフィリエイト広告市場の健全化のため、ご理解賜ります様、お願い申し上げます。

広告掲載URLの提出開始についてのお知らせ

つまり、ブログに広告素材や広告リンクを掲載している場合、そのURLを届出することが求められています。

困ったな…手作業でブログのURLを全件開いて、広告掲載リンク(アフィリエイトリンク)を調べるのはとっても面倒くさい…

ということで、簡単にできる方法を探してみたけど見つからず。

ブラックボックスの怪しいプログラムとかに頼るのも嫌だし…

じゃあ自分で作っちゃおう!ということで、「はてなブログ A8.netの広告掲載URL(リンク)の抽出・管理 csv の一括出力プログラム」を作りました。

せっかくなので、はてなブログのユーザーの人が使えるように、作ったプログラム(はてなブログ専用版)を掲載し、使い方を解説します。

なお、私の動作環境はMacBook(MacOS)ですが、Googleの環境を使うのでMacOSでもWindowsでも動きました(動作確認済)。→プログラムコードを公開しているので、自己責任でお試しください。(個人ユーザー限定。商用利用禁止)

はてなブログ用の A8.netの広告掲載URL管理 csv 一括出力プログラム を動かす環境構築

はてなブログ用の A8.netの広告掲載URL(アフィリエイトリンク)管理 csvの一括出力プログラムを誰でも使えるように、無料で使える「Google Colaboratory」を使います。

これからやることは、次のとおり。

  1. Google Colaboratoryを設定
  2. プログラムをコピペして実行
  3. 自動作成されるcsvの中身をチェック
  4. A8に広告掲載URLのcsvファイルをアップロード

詳しいことはわからなくても、手順に沿ってすすめればOK。でも無理はしないでね。

Google Colaboratoryを設定してプログラム実行環境を整備

Google Colaboratoryを設定するため、MacBook(またはWindows PC)のブラウザを、Google Chromeにしてください。

Googleにログインします。(Google Colaboratoryを設定済みの人は設定方法の部分は飛ばしてください)

Macの場合は、Google検索画面を出すと、右上にメニューアイコンがあるので、押すとGoogleドライブを選べるようになります。

Googleドライブを開く

Googleドライブを開く

Googleドライブを開いてください。(MacOSもWindowsも同じ)

Googleドライブを開くと、左上に「新規」ボタンがあるのでクリックしてください。

Googleドライブの「新規」をクリック

Googleドライブの「新規」をクリック

続いて、開いたメニューから「その他」の中にある「+ アプリを追加 」をクリックしてください。

「その他」の中にある「+ アプリを追加 」をクリック

「その他」の中にある「+ アプリを追加 」をクリック

続けて、アプリの検索画面で「Colaboratory 」を検索し、「Colaboratory 」を選択してクリックしてください。

「Colaboratory 」を検索して選択

「Colaboratory 」を検索して選択

続けて、「Colaboratory 」をインストールしてください。

「Colaboratory 」をインストール

「Colaboratory 」をインストール

しばらく待つと、インストールされます。

インストールが完了したら、次の画面が出るので、「OK」と「完了」をクリック。

インストールしたら、Ok、完了をクリック

インストールしたら、Ok、完了をクリック

Googleドライブの、左上の「+新規」ボタンをまたクリックしてください。

続いて、「その他」のメニューを選ぶと、最初はなかった「 Colaboratory 」が追加されているので、「 Colaboratory 」をクリックしてください。

「その他」の「 Colaboratory 」を選んでクリック

「その他」の「 Colaboratory 」を選んでクリック

これでプログラムを動かすのに必要な環境が設定できました。下記の画面が出て、プロンプトが点滅していればOK。

三角マークのところにあとでプログラムをコピーします

三角マークのところにあとでプログラムをコピーします

コピペする、広告掲載URLの抽出・管理 csv作成プログラム

コピペする広告掲載URLの抽出・管理 csv作成プログラムは次のとおり。

先頭の # ここからコピー から 最終行の # ここまでコピー までをコピーして、先ほどの「 Colaboratory 」のプログラムを貼り付ける部分にコピペしてください。

# ここからコピー

# A8 Ad Link 抽出プログラム Ver1.1
# Copyright 2023 SimpleLifeNavi

import requests
from xml.etree import ElementTree as ET
from bs4 import BeautifulSoup
import csv

def fetch_content(url):
    response = requests.get(url)
    return response.text if response.status_code == 200 else None

def parse_links(html_content):
    soup = BeautifulSoup(html_content, 'html.parser')
    unique_links = set()

    for a_tag in soup.find_all('a', href=lambda x: x and 'https://px.a8.net' in x):
        link_content = a_tag.get('href')
        mid_value = a_tag.find('img')['src'][a_tag.find('img')['src'].find('&mid=s') + 6:a_tag.find('img')['src'].find('&mid=s') + 20] if a_tag.find('img') and a_tag.find('img').has_attr('src') and '&mid=s' in a_tag.find('img')['src'] else None

        plus_positions = [pos for pos, char in enumerate(link_content) if char == '+']
        start_pos = plus_positions[-2] + 1 if len(plus_positions) >= 2 else None
        end_pos = plus_positions[-1] if len(plus_positions) >= 2 else None

        extracted_text = link_content[start_pos:end_pos] if start_pos is not None and end_pos is not None else "not found"
        unique_links.add((link_content, f"s{mid_value}", extracted_text) if mid_value else (link_content, None, extracted_text))

    return unique_links

def write_to_csv(filename, fieldnames, data):
    with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(data)

def main():
    domain = input("あなたのブログのドメインを入力してください: ")
    root_url = f"https://{domain}/sitemap.xml"
    data = []

    try:
        with requests.Session() as session:
            for sub in (loc.text for loc in ET.fromstring(fetch_content(root_url)).findall(".//{http://www.sitemaps.org/schemas/sitemap/0.9}loc")):
                try:
                    for path in (loc.text for loc in BeautifulSoup(fetch_content(sub), 'html.parser').find_all('loc')):
                        print(path)
                        links = parse_links(fetch_content(path))
                        for link, mid_value, extracted_text in links:
                            print(f"  {link}, {mid_value}, {extracted_text}")
                            data.append({'PID': mid_value, 'URL': path, 'Ad URL': link, 'Tag': extracted_text})
                except TypeError as e:
                    print("このサイトは通常のはてなブログのサイトマップと構成が異なっているようです。処理を中断します。")
                    break  

        if not data:  
            print("A8の広告リンクを確認できませんでした。処理を終了します。")
            return

        blank_row_indices = [i for i, row in enumerate(data) if not row['PID']]
        for index in blank_row_indices:
            matching_rows = [row for row in data if row['Tag'] == data[index]['Tag'] and row['PID']]
            data[index]['PID'] = matching_rows[0]['PID'] if matching_rows else None

        output_csv = 'y'
        if output_csv.lower() == 'y':
            csv_filename = 'a8.csv'
            write_to_csv(csv_filename, ['PID', 'URL', 'Tag', 'Ad URL'], data)
            print(f"処理が完了しました! {csv_filename} が作成されました.")

    except Exception as e:
        print(f"エラーが発生しました: {e}")

if __name__ == "__main__":
    main()

# ここまでコピー

上記プログラムで、ブログのサイトマップを取得して各ページを巡回し、各ページに掲載されているA8の広告を抽出してリスト化します。

(作業料分有償でもいいからここまでの設定手順も不要で1クリックで動くツールが欲しいという声が多い場合は、上記作業不要のパッケージツールでのご提供を検討します)

はてなブログ用の A8.netの広告掲載URL管理 csv一括出力プログラムを実行するやり方

コピペしたプログラムを動かします。左上に表示されている三角マーク(実行ボタン)をクリックしてください。

注意:サイドバーなどの全ページ共通部分にA8の広告がある場合、ブログの構造上全ページに広告があると判定するので、プログラム実行前にサイドバー部分(共通部分)のA8のアフィリエイト広告を一旦外してから実行することをお勧めします。(そのままでも構いませんが、該当広告を全ページ分リスト化します)

プログラム実行ボタンをクリック

プログラム実行ボタンをクリック

実行すると、左上の三角マークが四角になり、周りを時計回りに動作マークが動き出します。

しばらくすると、あなたのブログのドメインを入力するようにメッセージが出ます。枠内にコマンド入力できるようになるので、ブログのドメインを入力してください。

https://を除く、ブログのドメインを入力

https://を除く、ブログのドメインを入力

あなたのブログのサイトマップを巡回して、A8の広告コードのURLがあるページの抽出作業が始まります。

ページが多いと時間がかかります。

完了メッセージが出るまで待ってください。

処理中のマークが三角に戻り、完了したことを確認

処理中のマークが三角に戻り、完了したことを確認

実行ボタンが動作中の四角から三角になれば処理が無事完了です。

処理完了と、CSV作成のメッセージが出ていることを確認してください。

続いて、左側のメニューのフォルダマークをクリックすると、自動作成されたa8.csvというCSVファイルが見つかります。

フォルダマークを押すと a8.csvが見つかる

フォルダマークを押すと a8.csvが見つかる

a8.csvファイルの右側の3点マークや右クリックなどで、ダウンロードメニューを出し、a8.csvファイルをダウンロードしてください。

a8.csv をダウンロードして保存

a8.csv をダウンロードして保存

CSVファイルが見つからない場合は、プログラムがGoogle Colaboratoryに正しくコピペできていない可能性があるので、いったんプログラムコードを消し、コピペからやり直してください。

これで、ブログのサイトを自動巡回して、a8ネットの広告掲載ページの情報を集めることができました。

A8.netの広告掲載URL管理 csv一括出力ファイルの中身の確認と提出・アップロード

それでは最後の調整です。

ブログにA8ネットで取り扱っているアフィリエイトのバナー広告(画像イメージ)を貼っている場合は、広告のプログラムIDを自動で取得し、リスト化します。

自動で上図のようにcsv形式でリストを作成します

自動で上図のようにcsv形式でリストを作成します

広告のプログラムIDを最終チェック

テキストリンクのみの場合は、広告URLにプログラムIDが含まれていないため、リストの1行目(PID)が空欄になっている場合があります。その場合は、自動取得したCSVに含まれる4列目の広告リンクURLをクリックして、広告主をチェックしてください。

a8.csvを開くと、4列目(D列)に広告のURLがあり、MacとNumbersの場合は クリックすると自動的に広告のリンク先サイトが開きます。WindowsやExcelの場合はURLが自動でハイパーリンクにならないので、2行目ならE列をHYPERLINK関数を使って"=HYPERLINK(D2)"にすると楽です。

広告リンク切れになっている場合は広告プログラムが終了しているので、該当した行のデータを削除してください。

サイトを見れば広告主がすぐわかると思うので、対象の広告主をA8のサイトで検索し、広告の「プログラムID」を確認し、1列目(PID)にコピペしてください。

広告主のプログラムIDはA8の検索窓から調べる

広告主のプログラムIDはA8の検索窓から調べる

3列目のC列は同一広告主の場合同じになるので、C列でソートすると、同一内容の場合は1行目のプログラムIDの穴埋めが少し楽になります。

a8.csvの1行目(A列)の空白がなくなったらリスト完成です。

a8へアップロードするCSVファイルを作成する

a8への一括アップロードする前に、csvを最終調整します。

広告主のIDが自動取得できない場合、対象の広告がわかるように、3列目に広告主の見分けタグ、4列目に広告のURLを載せていますが、これを削除します。

1行目の、PID,URL,Tag,Ad URLのタイトル行は削除してください。そして、A列とB列だけを残してCSV(UTF-8形式)で保存してください。

C列、D列を削除して、A列とB列だけにする

C列、D列を削除して、A列とB列だけにする

MacのNumbers利用の場合は、ファイル>書き出す>CSVを選び、UTF-8で保存してください。(エクセルの場合、csv(UTF-8形式)で保存)

csvのUTF-8形式で保存

csvのUTF-8形式で保存(Macの画面例)

これで a8.netから指定されている通りの項目(タイトル行なし、A列、B列のみのデータ)になります。

なお、4列目(D列)は同じ広告主でも複数の広告の使い分けで広告URLが異なる場合、別々にリスト化するため、3列目と4列目を削除すると、残った1列目と2列目が結果的に同じになる行が生じる場合があります。(現時点では重複データがあってもアップロード可能なので、そのまま(重複したまま)でも大丈夫。気になる人は重複行を削除してください。)

A8ネット指定の項目

A8ネット指定の項目は上図の通り

上記で最終調整し、保存したCSVファイルを開き、形式に問題ないことを確認してください。A8指定の形式になっていることを確認したら、ファイルを閉じてください。

a8へ広告掲載URLのCSVファイルを一括アップロードする

保存したcsvファイルをA8ネットのサイトからアップロードすれば、広告掲載URLの提出は完了です。

A8ネットのサイトにログインし、プログラム管理>広告掲載URL管理 に進むと下記の画面になります。

A8ネットにcsvでアップロードして完了

A8ネットにcsvでアップロードして完了

ファイルを選択して、アップロードします。これで、広告掲載URLの提出までできました。

手作業で広告のURLがあるページを調べるのと比べると、めっちゃ楽になったと思います。

もしCSVアップロード時に「未提携」などの表示が出た場合は、広告終了済みや提携解除分が含まれているので、対象PIDの行を削除したCSVを再度アップロードすればOKです。(CSVのファイル名は半角英数字にすること)

アップロードエラーの場合、終了広告のPIDを消す

エラー発生時は、対象PIDの行を消して再提出すればOK

エラーが出た時は下記が原因なので再チェック。

  • タイトル行(PID,URL,Tag,Ad URLの文字があるタイトル行)の削除もれ
  • 1列目(A列)、2列目(B列)以外のデータがある
  • 広告案件が終了済みまたは提携解除されているプログラムIDがある
  • プログラムID補記時のPIDのコピペに失敗している(空白や全角文字がある)
  • ファイル名に全角文字がある(半角英数字以外はエラーになる)
  • ファイル形式がCSV(UTF-8形式)ではない

なお、この記事で紹介している内容は、A8.netの広告掲載URL管理の手続きが楽になるように、私が自分のために作ったプログラムを利用して、できるだけわかりやすく解説したものです。

上記プログラムを広告掲載URL確認のためのツールとして利用してみたい人は「自己責任」での私的利用に限りご利用いただけます。なお、プログラムの不具合、広告掲載URLの情報の抽出漏れ(取得漏れ)などが生じても責任は負えませんのでご注意ください。

「本記事の内容が役に立った」という人は、B!ブックマークでコメントしていただけると嬉しいです。MacOSでもWindowsでもGoogle Colaboratory上で使えます(動作確認済)。使ってみた人は B!ブックマークやコメント記載をお願いします。

記事内容を引用される場合は、ブログカードなどで当サイトを掲載していただくようお願いします。プログラムのパクリは悲しくなるのでご遠慮ください。

また、ツールが便利だった、時短になったという人は、codocでのサポートを是非お願いします。