ファイル名を連番でリネームするシェルコマンド

num=1;digits=4;prefix="img_";ext=".jpg";for fn in `ls -1F|grep -v /|sort`; do num2=$(echo -n "0000$num"|cut -c$[`echo -n "0000$num"|wc -c`-$digits+1]-);mv $fn "$prefix$num2$ext";num=$[$num+1]; done;
カテゴリー: Uncategorized | コメントをどうぞ

AdWords API って誰でも使えるの?有償なの?どこに情報あるの?

ここ 1 年で、AdWords API に興味をもたれる方に時々お会いしたり、そのような話しを聞くようになりました。
以前は、AdWords 使っているような方でもその API の存在すらご存知ないことが普通で、Google の正規代理店の方の中でもごく一部の方のみご存知・・なんていうマイナーな存在でしたが、とうとう広告の世界にも自動化の時代が本格的に来はじめたのを強く実感しています。

# 欲を言えば、AdWords だけに限らず&オンライン・オフラインにこだわらず、
# 業界全体が API を広く解放して、自動化を促進してくれると嬉しいのですが。。

ただ、AdWords API って、これからはじめたい方には特に謎が多いらしいので、ここで基本情報をまとめてみたいと思います。

AdWords API 公式情報

  • AdWords API 基本情報 : 下記のリンクAdWords の機能情報(ヘルプセンター)から辿れますが、公式情報の中で一番最初にみると良いのはここです。
  • AdWords API サイト : 仕様書、Blog、フォーラム等への入り口
  • AdWords API 仕様書 : 事実上英語のみです。日本語バージョンは翻訳が追いついてない状況なので、必ず英語版を参照します。ただ、仕様書って読み物ではなくてパターン制のある情報なのでなんとかなります。。
  • AdWords API 問合せ先(API フォーラム) : Groupsです。なのでメンバー登録しておくとメールで受信も可能です。ただ英語のみ・・
  • AdWords API 最新情報(blog) : AdWords API Blog です。新バージョン リリースの通知、開発に役立つ情報などが、Google エンジニアから直接投稿されます。Google の中の人に聞くよりこのBlogに投稿される方が早いらしいので、本当に最新の情報なんだと思います。
  • AdWords の機能情報(ヘルプセンター) : API を使うには当然その本体を知らなければなりません。AdWords の機能やその解説はここで確認します。
  • AdWords を体系的に学習したいとき : AdWords をマスターした証として、認定資格があります。ここは AdWords 認定資格を取得する人の為のラーニングセンターです。資格をとる気はなくても、ここを起点にAdWords機能を習得するのが一番の近道だと思います。
    → ここ見てびっくりする方もおれると思います。AdWords ってすっごく高機能なんですよね。。逆に言えば痒いところに手が届くので、やる価値はあると思います。
    → 上記リンク先から行けるページですが、最初は「初心者用機能の解説まとめ」から入ると良いと思います。

AdWords API って誰でも使えるの?

  • 答えとしては Yes です。
  • AdWords アカウントさえ持っていれば申請可能です。ただ、通常のAdWordsアカウントだけではなく、AdWords アカウントを管理する為の親アカウント(MCC アカウントと呼ばれます)が必要です。
  • AdWords アカウントは、Google検索ページ広告掲載→「AdWordsをはじめる」ボタンから作成できます。
  • MCC アカウントの作成方法は、ここに従います。
    → エムシーシー アカウント呼びます。ちなに、My Client Center の略です。
  • MCC アカウントさえあれば、AdWords API の利用申請は簡単です。下記で説明します。
  • MCC アカウントを作成したら、既存の AdWords アカウントとリンクさせておきます。
    そうすることで、将来 AdWords アカウントを複数管理したくなった時でもそれらをMCCにリンクさせることにより、MCC アカウントに一度ログインするだけでどのアカウントにも自由にアクセスできるようになります。
    → つまり、MCCアカウントは1つあればよく、その下に運用している AdWords  アカウントをリンクしていきます。
    → 数百のアカウントを運用するようになると、アカウントのグループ分けをしたくなる場合もあります。そんなときはサブMCCアカウントを作り、トップMCCの下に複数のサブMCCアカウントがリンクされ、更に各サブMCCアカウントの下に複数の通常AdWordsアカウントがリンクされる・・という構図にすることも可能ですが、通常はMCCアカウントは1つしか必要ありません。

AdWords API 利用申請の手順

  1. MCC アカウント(上述)にログインします
  2. 「アカウント」タブ → 「AdWords API センター」を選択
  3. AdWords API センターページに表示されるリンクから、AdWords API の利用申請をします。画面の指示に従うだけです。
  4. 3. の指示通りに進めばあとは待つだけ(通常2-3週間かかります)ですが、課金情報ってちゃんと入れましたか?入れないといつまで待っても審査されないので要注意です。
    → 課金情報とは、API 利用に対する課金先情報のことで、必ずクレジットカードである必要があります。(前払い・コンビニ払い・請求書というオプションは原則ないそうです)
    → 課金情報が入っているかどうかの確認は、MCC にログインしている状態で、「料金」タブ→「課金設定」で確認できます。
  5. Google による承認がされると、英語でその旨のメールが届くはずです。
    メール以外にも確認方法はあり、2.の AdWords API センターにアクセスしたとき、「開発者の情報」セクションで「承認」と出れば AdWords API を利用開始することができます。

[補足] 最新情報!(2011年11月時点)

  • 昨年までは、上記手続きをすれば1ヶ月以内には承認されるという状況でしたが、最近 API 申請が一般化しはじめてきた為か、承認してもらえないケースや承認されていたものが不承認になるというケースを耳にするようになりました。
  • 確かな情報筋(?)に確認したところ、AdWords API の利用方法が明確にわからない申請に対しては承認がなかなかされない状況のようです。
  • ただし、以下の情報を記しておくとスムーズに承認プロセスが進むそうです(英語で書く必要があるそうです)
  1. AdWords APIの利用目的
  2. 開発したシステムの利用者
  3. 開発予定システムの概要
  4. どこに対してアクセスするのか
  • その情報を、利用申請時に記しておきます。場所は下記となります。
    (AdWords API センターの中にあります)
  • もし、自分が広告主で、自社開発したシステムを自社アカウントの為に使いたいということであれば、以下の様に書けると思います。以下はレポートを自動化するシステム開発をする場合の例です。(そのままコピーではなく、実際に作成予定のシステムのことを書いてくださいね)

We are a pure advertiser and planning to develop our own application by using AdWords API in order to automate our manual ad operations.
So, the users of the application are only internal people and don’t have any plan to expose externally.
We are going to develop reporting system that downloads weekly AdWords report into our internal share directory automatically. Also the reporting system only accesses to our own AdWords account(s).

[補足] 開発者トークンは 1 社に 1 つのみというルール

  • AdWords API 利用申請を行うと、「開発者トークン」というものが付与され、そのトークンを使うことで AdWords API が利用できるという仕組みになっています。
  • ただし、この開発者トークンは 1 社につき 1 つしかもらえません。
    もし、事業部毎にもらおうと考えていて、ある事業部のみが扱っているMCCで利用申請してしまうと、その他の事業部は二度と AdWords API の利用申請ができないので要注意です < こういうのって大企業しか起こりそうにないですが・・
  • たとえば、東京と大阪それぞれに事業部があり、大阪事業部が先に AdWords API の利用申請をした場合には、東京事業部の人達は大阪事業部が申請して得た 開発者トークン を使うことになります。
    → なので、会社ではじめて AdWords API 利用申請をする際には、他のシステム関係部署にも事前お知らせしたほうが良いです。
    → また、既に誰かが先に申請している可能性もあるので、申請前に一度社内で確認してみることもお勧めします。(申請時間の節約にもなりますし)

AdWords API は無料?有料?

  • 有料です。
  • ただし、無料でも使える方法があります!

AdWords API の無料 API ユニット

  • 代理店もしくはツールベンダーの場合と、広告主の場合で、無料 API ユニットの申請方法も違うしもらえる無料枠の量も違います。
  • 広告主の場合:
    MCC から AdWords API 利用申請(上述)をした際に、無料 API ユニットが付与されることがあります(承認結果次第なので保証されるものではありません)。どのような場合かというと、自分で開発したものを自分のアカウント管理の為に使う場合です。
    → 上述の「最新情報!」の最後に書いているような説明を英語でつけておくことで、無料 API ユニットをもらえる可能性が高まるでしょう
    → 無料 API ユニットがもらえたかどうかは、AdWords API センター ページの「使用状況データ」セクション内の「残ユニット数」に1以上の数値がかかれていれば付与されたということです!(0とか空白ならもらえていない)
    → 無料 API ユニットは、毎月月初(米国西海岸時間)に付与されるそうです。また、もらえる量は固定ではなく、前月に AdWords に使った料金の総額に比例するということです。沢山広告出す人にはより多くの無料枠をあげるということですね。
  • ツールベンダーもしくは代理店の場合:
    昨年までは、広告主以外は、AdWords API は全て有料でした(@o@)
    そう、広告主が沢山ツールを使うと、それだけツールベンダーの負担は大きかったのです・・ですが、今は AdWords API の優待料金制(Preferred Pricing)というものができ、頑張れば無料のAPIユニットがもらえるようになっています!
    (日本語化されていますが、申請フォームだけは全て英語で記述する必要があります)
    申請基準や、申し込み方法は上記URLにある通りです。。が、一応概要を下記に記しておきます。(以下は個人的な経験による情報なので、Google からの情報やメッセージが正です)

    • AdWords 認定資格者が社内に在籍していること
      (代理店契約の場合は、認定資格者がいる他に売上げ金額の基準もありますが、AdWords API 優待料金制は売上げ額の基準はないそうです – 2011年11月時点での確認)
    • 外部公開している(社外の人がログインできる)ツールがある場合は、その旨を申請フォームに記述し、Google による審査を受ける
    • どのような審査かというと、RMF (Required Minumum Functionality) の実装がされているかどうかのチェック
      RMF最新版(英語)RMF日本語版(バージョンが記されているので英語版と同じか要チェック)
    • Google 審査用にツールのログインアカウントを発行してあげる必要があります。英語のUIがあれば、Google 側で勝手にチェックしてくれる可能性が高いですが、日本語UIのみの場合は、Google Docs に(我々申請者側が)ツールのスクリーンショットと簡単な英訳をつけてRMFの各ファンクション毎に実装してあることを示す必要がありました。
      → 超めんどくさいです。。英語UIを用意する方が楽かも。。
      → でも、通ってしまうと天国です
    • あ、この審査は、ツールをバージョンアップしたタイミングと、申請が通ってから1年経った時点で再審査(追加機能の差分審査)が必要なので、忘れないようにしないと・・

こうやってまとめてみると、AdWords API の基本的な情報だけで結構なコンテンツになるんですね・・。
でも、上記って勝手がわかっていないとなかなか得られない情報だとも思うので、ここを訪れられた方の何人かのお役にたれば嬉しいのですが・・

ここまで読んでいただいた方、おつかれ様でした!

最後に

これからのシステム開発は益々グローバルに向かっていくと思います。
英語は必須の時代になると思います。
英語さえ読み書きある程度できれば、上記情報を得るのは結構簡単だったりします。

AdWords API フォーラム

をチェックしたり、そこに質問するだけで、直接Googleのエンジニアからの返事が返ってくるので、簡単に最新情報が得られるんです。

31歳から英語を勉強しはじめ、米国大手企業の副社長にまでなられたという日本人がおられるのをご存知でしょうか?私はこの方に勇気をもらいました。

英語は手遅れかも・・と思っている中年サラリーマン・事業主の皆さん!一緒に頑張りましょう!

カテゴリー: Uncategorized | 3件のコメント

Python で日本語メールを送信する方法

環境にもよるのか、日本語でメールを送信したい際にウェブで関連情報を見つけても、動かなかったりして過去のソースを漁ったりしていたので、自分用のまとめ

とても参考になるのがウノウラボさんのこの記事
Pythonでメールを送信したい人のためのサンプル集

この記事にある『日本語を含んだメール』部分のコードが使えそうだと思い、私の環境でで実行してみたところ。。。下記のエラーが。。

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)

「あぁ・・・またこれか」とつぶやきつつ、この原因はプログラムの冒頭で

import sys
print sys.getdefaultencoding()

などとすると

ascii

と返ってくるので、デフォルトエンコーディングが ascii がになっていることなのだと理解しているのですが、今回はここで

utf-8

が返ってくるようにしたい。。。

なので、

sys.setdefaultencoding('utf-8')

としてみたくなるのですが、プログラムの中でやると

AttributeError: ‘module’ object has no attribute ‘setdefaultencoding’

などと言われてしまい、実行中にデフォルトエンコーディングを変更させてもらえません。。ただ、プログラム実行前に予め設定しておくことはでき、その為には

/usr/lib/python2.6/site-packages/sitecustomize.py

というファイル(パスは環境次第、ファイル名はこの名前であること)を作って、その中身を下記のようにすれば良いのですが

import sys
sys.setdefaultencoding('utf-8')

site-packages の中を触りたくないというワガママを言いたい時があります。
そんな時に python を -Sオプションをつけて実行させることで site モジュールを自動で読み込まなくなる代わりに、自分で sys.setdefaultencoding() がプログラム中で使えることを知りました。

そしてたどり着いたコードが下記となるのですが、ここでエラーが・・

#!/usr/bin/python -S
# -*- coding: utf-8 -*-

import sys
sys.setdefaultencoding('utf-8')
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate

def send(from_addr, to_addr, msg):
    s = smtplib.SMTP()
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()

def create_message2(from_addr, to_addr, subject, body, encoding):
    msg = MIMEText(body, 'plain', encoding)
    msg['Subject'] = Header(subject, encoding)
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
    return msg

if __name__ == '__main__':
    from_addr = 'foo@example.com'
    to_addr = 'bar@example.com'
    msg = create_message2(from_addr, to_addr, u'テスト', u'本文', 'ISO-2022-JP')
    send(from_addr, to_addr, msg)

上記のコードを私の環境で実行すると

smtplib.SMTPServerDisconnected: please run connect() first

がでたので、send() の中に s.connect() を入れました。

最終的には、下記のようなコードで日本語メールが送信できるようになりました。
# 下記コードは、冒頭で触れたウノウラボさんのコードをベースにしています

#!/usr/bin/python -S
# -*- coding: utf-8 -*-

import sys
sys.setdefaultencoding('utf-8')
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate

def send(from_addr, to_addr, msg):
    s = smtplib.SMTP()
    s.connect()
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()

def create_message2(from_addr, to_addr, subject, body, encoding):
    msg = MIMEText(body, 'plain', encoding)
    msg['Subject'] = Header(subject, encoding)
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
    return msg

if __name__ == '__main__':
    from_addr = 'foo@example.com'
    to_addr = 'bar@example.com'
    msg = create_message2(from_addr, to_addr, u'テスト', u'本文', 'ISO-2022-JP')
    send(from_addr, to_addr, msg)
カテゴリー: Uncategorized | コメントをどうぞ

Google Analytics 用の長いURLをすっきりさせる方法-代替案

Web担当者Forumさんの『長くて汚いutm_*パラメータ付きURLをキレイにするGoogle Analytics用の少しマニアックなスクリプト』を拝読しました。

個人的には、何をやっているかがちゃんと理解できてさえいれば、それでビジネス的な目的達成に近づくなら、ベンダーのサポートが得られない方法で実装を工夫をするというのはありだと思っているので、いいアイデアだと思うのですが。。この記事を読むとあまり賛成派って少ないんですね。。

# もし何かあった場合でも、正規の実装方法で再現方法を発見してサポート受ければいい話ですし。。。逆にそれができないならベンダーが提供する正規の方法以外はやらないべきだとも思いますが

 

この記事ではリダイレクトさせる方法をとられているので、ログ型のトラッキングツールも併用している場合には、フィルタリングなどをしないと重複カウントされそうな気がしました。その場合の代替案として以下のようなものを考えてみました。

  1. URLをハッシュフラグメント(URLの#以降)でトラッキング用に差別化
  2. 指定したハッシュ値があれば、Google Analytics コード側にてキャンペーン情報を埋める

ハッシュ値を得るには、JavaScript で

location.hash

とすることで取得できます。この内容が指定したものであれば__gaq.push() を使ってキャンペーン情報を埋めてからトラックさせるようにするだけという仕組みです。

たとえば、メルマガ内に

http://example.com/landing_page.html#mm

というリンクを貼ったとします。ここでは『#mm』が、メルマガから来たということを示しています。

http://example.com/landing_page.html 内に下記のような Analytics タグがあった場合に

<script type="text/javascript">
 var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'UA-1234567-89']);
 _gaq.push(['_trackPageview']);
 (function() {
    var ga = document.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    ga.src = ('https:' == document.location.protocol ?
 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
 })();
</script>

以下のようにしておけば、URLには『#mm』をつけておくだけで『http://example.com/landing_page.html?utm_source=mail%2Bmagazine&utm_medium=email&utm_campaign=Xmas%2BSale』という長いURL相当の動きをします。

<script type="text/javascript">
 var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'UA-1234567-89']);
 if (location.hash == '#mm') {
   _gaq.push(['_setCampNameKey', 'Xmas Sale']);
   _gaq.push(['_setCampSourceKey', 'mail magazine']);
   _gaq.push(['_setCampMediumKey', 'email']);
 }
 _gaq.push(['_trackPageview']);
 (function() {
    var ga = document.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    ga.src = ('https:' == document.location.protocol ?
 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
 })();
</script>

『?mm=1』のようにパラメータにしておいても同様のことができますが、パラメータは Google Analytics に記録されてしまうので、Analytics のレポートに記録されないようにハッシュフラグメントを使っています。

ハッシュにすることで、Web担当者Forumさんの記事で書かれているソーシャルブックマークの分散が防げるのかどうか疑問は残りますが、とりあえずURLの見た目をきれいにしたいというニーズと、ログ型トラッキングツールにも配慮するという意味ではこういうのが欲しいときがあるかなっと思ったので、メモがてら書いてみました。

カテゴリー: Uncategorized | コメントをどうぞ

コンバージョンタグ & リマーケティングタグ の中身は?

AdWords コンバージョンのタグとリマーケティングのタグは同一ということに気づいた前回

ついでなので、タグの中身について整理しておこうと思いました。
(あ、個人的な調査なので、ここでの内容は全く保証されるものではありません。Google に裏をとろうとかしないでください。やっても教えてくれないと思いますし・・)

ちなみに、AdWords のコンバージョン コードは下記のようなものです。

<!-- Google Code for &#12522;&#12463;&#12456;&#12473;&#12488;
 Conversion Page -->
<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = 1234567899;
var google_conversion_language = "ja";
var google_conversion_format = "1";
var google_conversion_color = "ffffff";
var google_conversion_label = "AsMRCPxqTRDn7P55Aw";
var google_conversion_value = 0;
/* ]]> */
</script>
<script type="text/javascript" src="
 http://www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="

http://www.googleadservices.com/pagead/conversion/1234567899/?

label=AsMRCPxqTRDn7P55Aw&amp;guid=ON&amp;script=0"/>
</div>
</noscript>

この中で調べたい要素は下記です。

google_conversion_id
google_conversion_language
google_conversion_format
google_conversion_color
google_conversion_label
google_conversion_value

これらに着目して、AdWords の管理画面でパラメータを動かしながら地道に調査してみた結果が下記となります。(力業で恐縮です・・)

google_conversion_id

→ コンバージョンタグ個々に割り当てられているユニークID


google_conversion_language

→ コンバージョン情報とってますよとユーザーに表示するトラッキング インジケータ(「サイト分析テキスト」とも呼ばれている)用の言語設定(サイト分析テキストについてはこことかこことかここを参照のこと)

 

google_conversion_format

→ トラッキング インジケータのレイアウト
1 = 1行表示
2 = 2行表示
3 = 非表示

 

google_conversion_color

→ トラッキング インジケータの背景色

 

google_conversion_label

→ 昔はトラッキングの目的 (購入/販売, お申し込み, 販売促進, 主要なページの閲覧, その他 .. の 5 種類) に応じた内容だった記憶があるのですが(例えば “Purchase”とか)、現在は特殊なIDになっている感じです。
アクション名をエンコードしたものか?と思えるかもしれませんが、私が試行錯誤した限りではそうではなく、内部的に持っているIDのような何かをエンコードしたものか、ランダムな情報のように見受けられます。
いずれにしても、Google が発行しているIDのようなもの・・と考えるのが自然かと思いました。

 

google_conversion_value

→ コンバージョンの収益として指定した値ですね(下記に補足あり)

 

コンバージョンの収益とは?

→「コンバージョンの収益」もしくは「アクションの収益」と呼ばれています

コンバージョンが発生した際に、そのコンバージョンがいくら相当の価値があるのかを Google に伝える為にあります。

AdWords のレポートにて、この値の合計金額が確認できるので、ROI を測る際の目安とすることができます。

また、ここの内容は決め打ちにするべきではなく、コンバージョンが発生する毎に動的に変更することを想定して用意されているようです。(→ ここの「4) 動的に生成されたページ等への対応方法」に詳しく説明があります)
コンバージョンページが動的なページの際に、特に有用となる機能かと。

カテゴリー: Uncategorized | コメントをどうぞ

リマーケティングで「カスタムの組み合わせ」作成時の条件について

API と関係ないのですが、ド・モルガンの定理つながり(?)で。。

AdWords のリマーケティングのユーザーリスト(=ユーザー層)を作成する際、複数のユーザーリストを組み合わせて新しいリストを作ることができます。

その際、論理演算子に変換するとスッキリする気がします。

http://adwords.google.com/support/aw/bin/answer.py?hl=ja&answer=171271

を見ると、条件は AND, OR, NOT に相当することが書かれていますが、もう少し具体的にまとめてみました。

日本語UI / 英語UI = 論理演算子
-----------------------------
および / and = and
これらのユーザー層すべて / all these audiences = AND
これらのユーザー層から一つ以上 / one or more of these audiences = OR
これらのユーザー層以外 / none of these audiences = NOR = NOT(A or B or C or ..)

なので、上記のスクリーンショットの例だと

(キャンペーンA訪問者 AND キャンペーンB訪問者) and (資料請求 OR パック1) and NOT (コンバージョン)

という感じです。

ちなみに、NOTに複数リストを選択した場合は

NOT (リスト1 or リスト2 or リスト3)

となるはずです。
これは

NOT (リスト1) and NOT (リスト2 ) and NOT (リスト3)

同じ意味になりますが、AdWords 管理画面上(上図の複合リスト設定ページ)にて、『および』で『これらのユーザー層以外』をいくつも繋げる NOT A and NOT B and .. という設定よりは、ひとつにまとめる NOT (A or B or ..) という設定の方がスッキリするかもしれないと思いました。(こんな文章で言いたいこと伝わってますでしょうか?)

でもその前に、そこまで複雑なカスタムリストが必要なケースがあまりないのかも。。

カテゴリー: Uncategorized | コメントをどうぞ

YouTube 動画の埋込みページを作るときに関連動画を出さない方法

YouTube API関連の備忘録

元ネタ : http://code.google.com/intl/en/apis/youtube/player_parameters.html

 

動画埋め込み時の、動画URLの最後に rel=0 として、ゼロをセットしておくことで動画の最後に出てくる関連動画の表示をやめることができる。

カテゴリー: Uncategorized | コメントをどうぞ