こんちわ。Adsenseコードを探して三千里シリーズ、中盤の第8話です。(うそ)
Adsenseコードを自分で貼りつけたはずなのに、どこに貼りつけたかさっぱり覚えとらんのです。完全に忘れました。これ、どげんかせんといかん、そんな話です。100も200もあるブログのエントリから、1つずつ目視でアドセンスコードを探すなんてやっとれんわ!怒るでしかしっ!(眼鏡をクイッとあげながら)、という紳士淑女やすしのみなさまをお手伝いできるかもしれないエントリとなります。
もくじ
この記事の概要
対象読者
①どの記事にアドセンスコードを貼り付けたか分からなくなってしまったアドセンサー。
②アドセンス管理画面で「この広告ユニットってどこかに貼ってるんだっけ?」と疑問に思ったアドセンサー。
③「手動で記事内に貼った気がするけど貼った場所は忘れた」というアドセンサー。
方法を2つご紹介
①はてなブログのバックアップエクスポートデータを解析する方法
はてなー限定となります。はてなの記事本文に貼り付けたアドセンス広告コードを一覧表示します。この記事内に解析マシーンを設置しているのでエクスポートファイルを指定するだけで本文に貼り付けた広告コードを一覧取得できます。またエクスポートデータをPythonでいじるコードも掲載しています。
②Webスクレイピングで根こそぎ集めてくる方法
もう1つの方法はWebスクレイピング技術を使ってサイト内の広告コードを全て取ってくるものです。こちらの方法は、はてなブログ以外でも使えます。サイトマップに記載されているURLにアクセスし、HTML内に存在するアドセンスコードを表示します。こちらは①と比較してブログヘッダ部やサイドバー、記事下に至るまで全てのアドセンスコードを取得可能です。
なんでアドセンスコード貼った場所がわからないんだってばよ!
「んなことぁ、どーでもいいんじゃいっ!さっさと出すモン出せや、兄ちゃん」という御輩様(おやからさま)は、こちらから次の項へ軽やかにお飛びください。
なんでアドセンスコードを貼った場所がわからなくなってしまうのか。これは初心者アドセンサーあるあるなんじゃないでしょうか(そんなことない?)。というより、私自身どこにコードを貼ったかわからなくなってしまったので、何とかして自分の貼ったコードを効率的に探したい、このように思ったわけであります。
ブログ上にアドセンス広告を表示するために、コードを挿入する手段は大きく3つあります。
①自動広告におまかせ
②スクリプトやプラグインで全ての記事に差し込む
③手作業で1記事ずつ貼り付ける
私はアドセンス審査に合格した後、どうやってコードを貼り付けようか悩みました。気持ちとしては①の自動広告で全てやってくれるならそこにお任せしたい。しかしどうもしっくり来る感じに貼り付けてはくれない。となると②か③だなと。
ここで今までに自分が書いたエントリを眺めてみると、あまりうまく記事が構造化されていないことに気づきました。ようは大見出しがエントリ内に1個しかなかったり、大見出し使ってなかったり、そもそも見出し1個も使っていないエントリすらありました。こうなると機械的に広告コードを差す②の方法も完全とは言い難い。(完璧主義者ではありませんが、若干その気があります)
では③の手作業でやるか、それなら自分で完全に掲載位置をコントロールできるし、それなりに見れる形にできるはずや。とも思ったんですが面倒くさいし、全てのエントリでコードを差し込む場所を考えるとなると、それがまた超面倒くさい。そこまで行くなら全てのエントリに見出しなんかをつけて修正していったほうが後々楽になるんじゃないか。
どーしたらいいんだろうか。葛藤ですね。
妥協案として、いずれはスクリプトで自動差込みにすることを目指して、当面はPV数の多いページに手作業でコードを貼っていく。これがベラー(Better)なんじゃまいか。そして結局のところ、この妥協案が私国会において賛成多数で可決されました。(この文章、解釈の仕方によってはサイコっぽいですね)
しばらくの後、私のアドセンスアカウントに最初のクリック報酬が発生しました。 目の前のPC画面に報酬金額が表示されるわけであります。当然、予算委員会では、こうなります。
悪魔議員の勝ち。迷ってる暇は無い。貼らなければ、はてなに上納するお金も、ドメイン代も、別のVPSサーバ代も稼げない。そして②の自動差込みと③の手動差込みの併用という形でとにかく広告が表示されるように修正をかましていきました。
さて、なぜ私がこのエントリを上梓しているのか、もうご理解いただけたでしょう。適当に貼りまくってたら、どこに貼ったのか分からなくなってしもうた、そういうわけでございます。
次項以降に書いていることを実行して、一応は収拾がついた状態になりました。けどふと思ったんです。広告の挿入箇所にこだわっている人って手動で1記事ずつ丁寧に挿入箇所を検討しているんじゃないかと。そういう人ってどうやって貼り付けたコードを管理しているんだろう。アドセンスやアナリティクスから一覧を出せたりするのだろうか。
ググって見ても、どうも「どこに貼ったか分からなくて困っている」というお馬鹿さんはいらっしゃらないようでした。きっと何かサクッとアドセンスコード貼付け済みページを一覧表示する方法があるのでしょうけど、それも分からなかった。
つーわけで、頭の体操を兼ねて作っちまおう、ということに相成りまして候。
注意事項 ※超重要
では、次項より私がやってうまくいった3つの方法を書いていきます。先に注意事項から。以下、二点ご理解ください。
①自己責任
②動作保証なし
また最後に書いているWebスクレイピングについては以下の内容もご理解ください。
岡崎市立中央図書館事件(おかざきしりつちゅうおうとしょかんじけん)は、2010年3月頃に岡崎市立図書館の蔵書検索システムにアクセス障害が発生し、利用者の一人が逮捕された事件である。利用者に攻撃の意図はなく、また、根本的な原因が図書館側のシステムの不具合にあったことから論議を呼んだ。逮捕された人物が取調べの後、Librahackというサイトを立ち上げて解説をしたことから、Librahack事件とも呼ばれる。
Webスクレイピング(上記の事件ではクローラですが)は相手やシステム次第でこういうことに繋がります。そのため、本エントリに書いているスクリプトを使う際は、自分が完全にコントロールしているシステムに向けて使ってください。ブログホスティングサービス(はてなとか)なんかに使う際には、robots.txtやその他利用規約などを確認してから自己責任でご利用ください。またスリープ処理を入れていますが、この時間スリープすれば大丈夫と言っているわけでもありません。よくわからないという方は使わないでください。
はてなブログのエクスポートデータの処理はシステム側に負荷をかけるものではないので、気軽に使ってみてもらって大丈夫です。
はてなブログのエクスポートデータから探す
この項に書いていることは、はてなユーザのみが対象となります。はてなブログのエクスポート機能で引っこ抜いたバックアップデータを解析します。なお、ここで確認できるのは記事本文に直接貼り付けた広告コードのみとなります。サイドバーや記事下に挿入される広告、また記事内に自動的に挿入されるように設定したコードは表示されません。あくまで記事内に直接貼り付けたコードだけです。
エクスポートデータの取得
まず解析に使うエクスポートデータの取得から。つーか、こちらを参照してください。
エクスポートすると、<ドメイン名>.export.txt というテキストファイルが落ちてきます。www.hoge-fuga.com.export.txtみたいな感じのファイル。こいつを使っていきます。
このエクスポートファイルはMovable Type形式になっているそうです。中身はこう。
AUTHOR: <作成したはてなユーザ名>
TITLE: <記事タイトル>
BASENAME: <カスタムURL(/entry/配下)> ※1
STATUS: <公開ステータス> ※2
ALLOW COMMENTS: <コメント可否>
CONVERT BREAKS: <改行設定>
DATE: <更新日時>
CATEGORY: <カテゴリ名>
-----
<bodyタグの中身>
-----
--------
(以下、繰り返し)
※1 下書きの場合は最終更新日時が入る模様
※2 Publish(公開)、Draft(下書き)、Future(指定日公開)
詳細は以下の公式ページ(?)を参照のこと。なお本エントリの主題とはそこまで関係ないので興味ある方だけどうぞ。
Movable Type のブログ記事インポートフォーマット | CMSプラットフォーム Movable Type ドキュメントサイト
この項では、ここで出力したエクスポートファイルをテキストとして、ゴニョゴニョいじっていきます。
はてなエクスポートデータ自動解析マシーン
さて、いよいよ主題中の主題です。
前節の最後に書きましたが、ここでは、はてなのエクスポートデータをいじっていきます。というか、ただのテキスト処理です。見てる方はアドセンスコードをサクッと一覧にしたいだけでしょうから、↓の「ファイルを選択」ボタンからエクスポートファイルを選択してみてください。ボタン下の枠内に前節で書いた「TITLE」「BASENAME」「STATUS」に加え、本文内に手動で書き込んだアドセンスコードに含まれる広告IDを表示します。
広告IDはアドセンスコード中の「data-ad-slot」に続く10桁の数字です。
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
data-ad-slot="0123456789"></ins> ←この番号が広告ID
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
NOTE:環境によっては動かないかも。その時はごめんなさい。
Pythonでサクッと取得する
こちらも同じくはてなのエクスポートデータをテキスト処理するだけです。つーか最初に作ったのがこっちだったので、無駄に少し拘りました。広告ID(10桁数値)と広告名(任意の名前)を辞書(advdic)に定義すると、出力時に広告IDに紐づく広告名を一緒に表示してくれる仕様です。よくわかんない方はそのままでも大丈夫です。1行目のファイルだけちゃんと指定できれば動作します。たぶん。
expfile = 'www.hoge-fuga.com.export.txt' # 広告IDと表示名の定義 advdic = { '0123456789':'ディスプレイ広告', '1234567890':'サイドバーの縦長のやつ', '2345678901':'記事内広告1', '3456789012':'インフィード広告1' } with open(expfile,mode='r',encoding="utf-8") as f: for line in f: s_line = line.strip() if s_line.startswith('TITLE:'): print('') print('=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=') print(s_line) if s_line.startswith('BASENAME:'): print(s_line) if s_line.startswith('STATUS:'): print(s_line) print('') if 'data-ad-slot=' in s_line: num = s_line.find('data-ad-slot=') id = s_line[num+14:num+24] if id in advdic: print(' 広告ID:',id,' ',advdic[id]) else: print(' 広告ID:',id)
こんな感じの結果が出力されます。 読み取った広告IDと上記コードの辞書に定義されている広告IDが一致した場合、広告名を表示します。一致するIDがなければ、IDの番号だけの表示となります。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= TITLE: サンプル記事1 BASENAME: 2019/11/04/210119 STATUS: Draft =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= TITLE: サンプル記事2 BASENAME: 2019/11/11/171453 STATUS: Draft 広告ID: 0123456789 ディスプレイ広告 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= TITLE: バッファローマンが腕に着けているアレを徹底調査 BASENAME: 2019/11/11/buffalo STATUS: Publish 広告ID: 0123456789 ディスプレイ広告 広告ID: 1234567890 サイドバーの縦長のやつ 広告ID: 9876543210 広告ID: 3456789012 インフィード広告1
Webスクレイピングで探す。
最後はWebスクレイピングで探すパティーンです。これはサイトマップに書いてあるlocタグのURLにそれぞれアクセスしてHTMLを取得、で実際に挿入されている広告IDを出力します。下記コードのURLだけ修正すれば動作します。その際、記事のページURLが一覧になっているサイトマップを指定してください。サイトマップ辿っていったりしないので。
ちなみにこちらの方法は、前項のはてなエクスポートデータを使う方法と比べて、ブログヘッダやサイドバー、記事下にある広告も取得可能です。表示される広告を全て根こそぎ収集して出力します。
動作のための前提条件なんかは敢えて記載しておりませんので悪しからず。
前々項に書いた 注意事項 を必ず読んでください。
import requests import time import re from bs4 import BeautifulSoup as bs4 # このURLだけは自分のサイトマップに変更してください。↓
sitemap_url = 'https://www.hoge-fuga.com/sitemap.xml?page=1'
# サイトマップを取得してBeautifulsoupとして読み込む
rs = requests.get(sitemap_url) soup_s = bs4(rs.content,'lxml-xml') # 広告IDと表示名の定義(自身の情報を設定すると、出力が見やすくなります) advdic = { '0123456789':'ディスプレイ広告', '1234567890':'サイドバーの縦長のやつ', '2345678901':'記事内広告1', '3456789012':'インフィード広告1' } # 各URLにリクエストを投げてゴニョゴニョする for loc_tag in soup_s.find_all('loc'): print(loc_tag.string) ra = requests.get(loc_tag.string) #ここでGET soup_a = bs4(ra.content,'html.parser') inss = soup_a.find_all('ins') for ins_tag in inss: if 'adsbygoogle' not in ins_tag['class']: continue if ins_tag.has_attr('data-ad-slot'): id = ins_tag['data-ad-slot'] else: continue if id in advdic: name = advdic[id] else: name = '' print(' id:',id,', name:',name) if soup_a.find(text=re.compile('enable_page_level_ads: true')) != '': print(' 審査コードあり') print('\n') time.sleep(10)
おわり