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;
-
最近の投稿
最近のコメント
アーカイブ
カテゴリー
メタ情報
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;
ここ 1 年で、AdWords API に興味をもたれる方に時々お会いしたり、そのような話しを聞くようになりました。
以前は、AdWords 使っているような方でもその API の存在すらご存知ないことが普通で、Google の正規代理店の方の中でもごく一部の方のみご存知・・なんていうマイナーな存在でしたが、とうとう広告の世界にも自動化の時代が本格的に来はじめたのを強く実感しています。
# 欲を言えば、AdWords だけに限らず&オンライン・オフラインにこだわらず、
# 業界全体が API を広く解放して、自動化を促進してくれると嬉しいのですが。。
ただ、AdWords API って、これからはじめたい方には特に謎が多いらしいので、ここで基本情報をまとめてみたいと思います。
AdWords API 公式情報
AdWords API って誰でも使えるの?
AdWords API 利用申請の手順
[補足] 最新情報!(2011年11月時点)
もし、自分が広告主で、自社開発したシステムを自社アカウントの為に使いたいということであれば、以下の様に書けると思います。以下はレポートを自動化するシステム開発をする場合の例です。(そのままコピーではなく、実際に作成予定のシステムのことを書いてくださいね)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 の無料 API ユニット
こうやってまとめてみると、AdWords API の基本的な情報だけで結構なコンテンツになるんですね・・。
でも、上記って勝手がわかっていないとなかなか得られない情報だとも思うので、ここを訪れられた方の何人かのお役にたれば嬉しいのですが・・
ここまで読んでいただいた方、おつかれ様でした!
最後に
これからのシステム開発は益々グローバルに向かっていくと思います。
英語は必須の時代になると思います。
英語さえ読み書きある程度できれば、上記情報を得るのは結構簡単だったりします。
をチェックしたり、そこに質問するだけで、直接Googleのエンジニアからの返事が返ってくるので、簡単に最新情報が得られるんです。
31歳から英語を勉強しはじめ、米国大手企業の副社長にまでなられたという日本人がおられるのをご存知でしょうか?私はこの方に勇気をもらいました。
英語は手遅れかも・・と思っている中年サラリーマン・事業主の皆さん!一緒に頑張りましょう!
環境にもよるのか、日本語でメールを送信したい際にウェブで関連情報を見つけても、動かなかったりして過去のソースを漁ったりしていたので、自分用のまとめ
とても参考になるのがウノウラボさんのこの記事
『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)
Web担当者Forumさんの『長くて汚いutm_*パラメータ付きURLをキレイにする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の見た目をきれいにしたいというニーズと、ログ型トラッキングツールにも配慮するという意味ではこういうのが欲しいときがあるかなっと思ったので、メモがてら書いてみました。
AdWords コンバージョンのタグとリマーケティングのタグは同一ということに気づいた前回。
ついでなので、タグの中身について整理しておこうと思いました。
(あ、個人的な調査なので、ここでの内容は全く保証されるものではありません。Google に裏をとろうとかしないでください。やっても教えてくれないと思いますし・・)
ちなみに、AdWords のコンバージョン コードは下記のようなものです。
<!-- Google Code for リ;ク;エ;ス;ト; 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&guid=ON&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) 動的に生成されたページ等への対応方法」に詳しく説明があります)
コンバージョンページが動的なページの際に、特に有用となる機能かと。
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 ..) という設定の方がスッキリするかもしれないと思いました。(こんな文章で言いたいこと伝わってますでしょうか?)
でもその前に、そこまで複雑なカスタムリストが必要なケースがあまりないのかも。。
YouTube API関連の備忘録
元ネタ : http://code.google.com/intl/en/apis/youtube/player_parameters.html
動画埋め込み時の、動画URLの最後に rel=0 として、ゼロをセットしておくことで動画の最後に出てくる関連動画の表示をやめることができる。