グーグルのモバイル版AdSenseはdocomoでは表示されない?

グーグルのモバイル版コンテンツ向け AdSenseが10月10日に日本での提供を開始したらしいです。


今まで、僕はPCで運営してるサイトがGoogleAdSense、同じサイトのモバイル版を他のアフィリエイトを使用していたので、これからGoogleAdSenseで統合できれば管理が楽になりそうです。


ということで、さっそく試してみることに!!

設置

広告のフォーマット、マークアップ、色を選択

背景やテキストの色を選べるところはPCと同じ。
モバイルではマークアップ言語の選択,文字コードの選択が必要になっていました。
マークアップ言語をxhtml,文字コードを自動検出にして次の画面へ。

チャンネルの設定

PCと同じです。

AdSense コード

PCサイトではjavascriptを使用してクライアント側でアドセンスの表示処理を行うようにんなっています。
が、モバイルではサーバ側で表示処理を行うようになっているためスクリプト言語を使用する必要があります。
以下はアドセンスの設定ページより引用

次のスクリプト言語のみをサポートしております。
PHP v4.3.0 以降
CGI/Perl v5.8 以降
JSP v1.2 以降
ASP v3.0 以降

言語を選択すると貼り付けるコードが表示されるようになっています。


自分が運営してるサイトは、もともとPHPで書いてるのでPHPを選択。
さっそく表示されたコードをサイトに貼り付けてみます。

結果

コードをモバイルサイトに貼ってPC(Opera 9.21)で見ると、表示されました。
が、肝心の携帯(SH700iS)で見ると表示されません。。。。
ページ自体は問題なく表示されるけど広告が何も表示されません。

2chみてみると

【携帯】Google AdSense携帯版【クリック保証】
2chみてみるとドコモで表示されないという情報多数。。。

305 :クリックで救われる名無しさんがいる:2007/10/10(水) 13:15:39 id:utyKN+eb0
肝心のiモードケータイで表示されない 
iモードシミュレータでは表示されるんだけど
311 :クリックで救われる名無しさんがいる:2007/10/10(水) 13:47:10 id:pSkazcu10
auでは出るけどドコモだと出ない
>>311 
ドコモだと表示されない、で正解? 
CHTMLだと表示されるのかな 
315 :クリックで救われる名無しさんがいる:2007/10/10(水) 14:02:43 id:hwfFOg310
うちもドコモダメ。CHTMLにしてもダメ。auは出る。 
SBはページあるけど端末持ってないから不明。
434 :クリックで救われる名無しさんがいる:2007/10/11(木) 02:30:52 id:HdboB+720
>>424 
SSI(Perl)でAUで問題なく表示できたよ。 
でもドコモは表示されない。 
恐らく、AUやSBは携帯固有情報が取得できるけど 
ドコモは「utn」でユーザーが送信しないと固有情報が取れないから 
チート対策が出来ないのでGoogleがドコモの公式サイトになるまで 
対応しないと思われ

どうやらは現在docomoでは表示されないようです。
確かに434の言うようにドコモは「utn送信なしで携帯固有情報がとれないという」
という仕様です。これが原因かどうかは不明だけど可能性としてはありそうですね。


たしかに携帯でのチート、自己クリック対策はモバイルのクリック型アフィリエイト製作側にとって
頭の痛い問題になりそうですね。
実際2chでも「自己クリックやり放題www」とかいう書き込みが結構あったのですがネタであると願いたいです。


これがドコモで表示させれない原因だとすれば、なんとかバランスのとれた解決方法を見つけてほしいですね。
いや、それ以前に、さっさと携帯のブラウザがもっと、まともになればすぐ解決なのに。。。

まとめ

  • コード生成まではPCと大体同じ
  • コードはスクリプトによって異なるが、基本的にはコピペするだけでOK!
  • PCで見ると広告表示されたが、携帯(SH700iS)だと広告部だけ表示されない
  • 2chでもドコモで表示されないという報告多数


おまけ-貼り付け用コード

最後に貼り付け用コードがどんな感じなのかについてまとめときます。
暇な人用。

コードの内容

まず、貼り付け用のPHPコードの内容については以下のような感じでした。

<?php
$GLOBALS['google']['設定項目名']='ほげほげ';
$GLOBALS['google']['設定項目名']='ほげほげ';
〜略(12個ぐらい続く)〜
require('グーグルドメインのURL(PHPファイル)');
?>
  • $GLOBALS配列に設定を入れている
  • $GLOBALS配列に入れる設定項目には、まず上のほうにはコードが表示される前の画面で設定した広告のID、チャンネル設定、マークアップ言語の設定
  • 下のほうは$GLOBALS['google']['ref']=$_SERVER['HTTP_REFERER'];のような感じで$_SERVER['']環境変数を読み込んで$GLOBALS配列に入れている、読み込んでいる環境変数は以下の7つ
    • $_SERVER['HTTPS'];
    • $_SERVER['HTTP_HOST'];
    • $_SERVER['REMOTE_ADDR'];
    • $_SERVER['HTTP_REFERER'];
    • $_SERVER['HTTP_HOST']
    • $_SERVER['REQUEST_URI'];
    • $_SERVER['HTTP_USER_AGENT'];
  • requireで外部(pagead2.googlesyndication.com)のPHPファイルを読み込み
requireで読み込んでいるPHPファイル

equireで読み込んでいるPHPファイルは当然外部アクセスを許可してるのでブラウザからでもDLしてコード読めます。
コードのライセンスはApache License, Version 2.0なので貼り付けてもOKぽいですが
たいした処理をしてないので内容だけ羅列

  • $GLOBALS配列の中身からURLを生成
  • fopenでそのURLのデータを読み込み
  • 読み込んだデータを出力

という感じで、このファイルはデータの橋渡しをしてるだけ。

正規表現塾!の開発状況報告1

「正規表現塾!」というサイトを作りながらCakePHPを勉強中です。
基本的な部分の実装ができたので経過を途中報告します。

現在実装できた機能

次の機能を実装することができました。

  • ユーザ認証
  • ユーザのマイページ/ユーザ名簿
  • 問題の投稿/修正/削除
  • 問題への回答/添削

というようにコアな機能の部分は大体実装することができました。

画面のスクリーンショット

  • 問題の一覧と回答画面




f:id:nori0620:20071009045255p:image

f:id:nori0620:20071009045510p:image

  • 正解と不正解





f:id:nori0620:20071009045521p:image


f:id:nori0620:20071009045530p:image

  • マイページ




f:id:nori0620:20071009045540p:image

CakePHPを使ってみての感想

まだまだ使えてるとはいいがたいですが、それでもフレームワークなしでの作成に比べれば
かなり速い速度で開発できることが体感できてます。
今までSmarty+ライブラリでやりくりしてきたのでMVCのViewerとContollorerの連携が自動で取れるというだけで
単純作業がかなり減らせてます。
これからも詰まったところや役立ちそうなノウハウがあったら、どんどんここで公開してくのでよろしくです!

これからの予定

実用的にするためには、まだまだやらないといけないことがありますが
とりあえず以下の機能を実装する予定です。

  • 問題へのタグ付け機能
  • 問題の検索
  • ユーザ登録の時の自動メール送信プログラムを使ったメールチェック

上記2つが終わって細かい点を何点か直した後でα版ということで
社内でしばらく使ってみることにしようとおもいます。


β版として一般公開するためには、問題同士をまとめて自分問題集やチュートリアル作る機能を
実装するところまでいってからにしたいのですが,時間的にしばらく先になるかもしれません。


というのは正規表現塾を作っているのは、これとは別に「あるサイト」を作りたくて
そのためにCakePHPを勉強しているので、今公開までいこうとすると正規表現塾のほうで
いっぱいっぱいになって、目的のサイトを作る時間がとれなくなるという
せつない状況になっちゃいそうだからです。
(ちなみに「あるサイト」の詳細は冬ごろまでお待ちを、、、個人的にすごい便利なサイトになる予定)


ということでβ一般公開はその「あるサイト」が一区切りしてからになると思います。

CakePHPでサイドバーにログインボックスを作る方法

ログインコンテナって?

というわけでこの前からちょいこちょことサイトを作成しながらcakePHPを勉強しています。
今日はすべての画面に表示されているサイドバーにログインコンテナを作る方法についてcakePHPの知識不足もあって手間取ってしまったのでまとめ直して置きます。
上で言っているログインボックスがどういうものかというと下の画像のようなもので、サイドバーとログインコンテナはサイトの全ての画面に表示されることが条件です。

  • ログイン前:ログイン情報を入力するフォームを表示

  • ログイン後:ユーザの登録情報とログアウトボタンを表示



作成の流れ

  1. ログインボックスの~/app/views/elements/にテンプレートを作成(ログイン前と後の2種類)
  2. ~/app/controllers/users_controller.phpに実際の処理を行い上のテンプレートを描画する関数を書く
  3. ログインボックスを表示したい所(例では~/app/views/layouts/default.thtml)の中に上の関数をrequestActionする部分を加える


準備

次のような環境で作成しています

  • 以下のようなユーザのテーブルを作成
CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(255) NOT NULL,
  `password` varchar(32) NOT NULL,
  `mailaddress` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
)
  • app/models/user.phpを作成
<?php
class User extends AppModel{
    var $name = 'User';
    function checkSession($sessionData){
  //この関数の中にセッションの有効性をチェックするような関数を書いてください
    }             
}
?>
  • app/controllers/users_controller.phpを作成
<?php
class UsersController extends AppController
{
}
?>

コード

1.ログインボックスのテンプレートを作成
/app/views/elements/loginbox.thtml
  • ログイン前のボックスのテンプレート
<div id="sidecontent">
<?if ($error): ?>
<p>入力されたログイン情報を確認できませんでした。もういちど入力してください。</p>
<? endif; ?>
<h2>User</h2>
<form action="<?php echo $html->url('/'); ?>" method="post">
<div>
    <label for="username">ユーザ名:</label>
    <?php echo $html->input('User/username', array('size' => 20)); ?>
</div>
<div>
    <label for="password">パスワード:</label>
    <?php echo $html->password('User/password', array('size' => 20)); ?>
</div>
<div>
    <?php echo $html->submit('ログイン'); ?>
</div>
</form>
</div>
/app/views/elements/userinfobox.thtml
  • ログイン後のボックスのテンプレート
  • $userにはセッションからの情報を格納する
<div id="sidecontent">
<h2>User</h2>
<p>name:<?php echo $user["username"] ?></p>
<p><?php echo $html->link("logout","/users/logout") ?></p>
</div>
2.コントローラの作成
app/controllers/users_controller.php
  • sideboxlogin()関数を追加します
  • セッションの有効性をチェックするために独自に作ったcheckSession関数を利用していることに注意してください
  • ここの部分は自分でセッションチェック関数を適当に作成してください。
  • 10/9追記 ログインフォーム以外のフォームからデータがPOSTされた時、Noticeが出ていたので修正しました。
<?php
    function sideboxlogin() {
        $this->set('error', false);
        $someone = $this->User->findByUsername($this->data['User']['username']);
        if( $this->User->checkSession($this->Session->read('User')) ){
            //modelにcheckSession関数を作ってそこでセッションの有効性をチェックしている
            $this->set('user',$this->Session->read('User'));
            $this->render('../elements/userinfobox');
            //セッションが入っている場合はメニュー表示
        }else{
            if(!empty($this->data['User'])){
                       if( !empty($someone['User']['password']) && $someone['User']['password']
                                                          == $this->data['User']['password'] ){       
                       //普通はパスワードを暗号化してると思うので
                       //仕様に合わせて上の一致条件は書き換えてください
                        $this->Session->write('User', $someone['User']);
                        $this->set('user',$this->Session->read('User'));
                        $this->render('../elements/userinfobox');
                        //データを受け取って、DBと一致すればログイン処理
                    }else{
                        $this->set('error',true);
                        $this->render('../elements/loginbox');
                        //DBと一致しなければエラーフラグ
                    }
            }else{                
                $this->render('../elements/loginbox');
                //データを受け取ってないときはログインボックス表示
            } 
        } 
    } 
?>
3.layouts/default.thtmlに上のコントローラをset
app/views/layouts/default.thtml
  • ログインボックスを設置させたい箇所に以下のように記述
<?php echo $this->requestAction('/users/sideboxlogin', array('return')); ?>

これで

表示できたでしょうか?
今回CakePHPにまだまだ慣れてないので効率の悪い点,セキュリティ上問題のある点、動作がおかしい点など
気がついた方はお気軽に報告していただけるとうれしいです。

-cakephpの練習のために作るサイト

やっぱりプログラミングは実際に作りながら身に着けるのが、手っ取り早いと思います。
ってことで練習のために、よく使われるWebアプリケーションの機能があるサイトを1つ作ります。
詳細は以下の通り

サイト名

正規表現塾!」

コンセプト

正規表現を学ぶには、基本と思想を学んだあとで実際の使う機会を集中的に持つことが一番大事
htmlのパーサを書かなければならない!などの必然性がある人は、この「使う機会を集中的に持つ」ことが
できるが、そうでない人のほうが実際に多いと思う。
そこでWeb上で正規表現の例題を投稿、共有できるサイトを作成してその人たちに「正規表現を集中的に使う」
機会を提供。
例題はWeb上から回答、採点できるようにすれば正規表現の勉強の敷居が低できる。
さらに、例題を共有することで「正規表現のサンプル集」としての役割も果たすことができる



実装する機能

とりあえず今あるアイデアはこんな感じ、最初はPHPでの正規表現のみを対象。
思い浮かぶままに箇条書きにしてるだけなので読みにくいと思います、すいません。
そのうち、きちんとした仕様として別の文章にまとめます。

  • ユーザ管理
  • 正規表現の問題の投稿
    • 例:〜を〜に置換しなさいといった指示
    • DBに対象のテキストデータと、どのような正規表現を行うかの指示を登録
  • 問題への回答とその採点
    • フォームに値を入れると実際にサーバで正規表現を実行して採点
  • 正規表現では正解は複数あるので、その集計データをとる
    • どんな処理がポピュラーなのかわかる
  • チュートリアル集の作成
    • 複数の問題をまとめる機能を作成し、それをチュートリアルとして使う
    • 例:初めて正規表現をさわるひとのためのチュートリアル
    • 例:htmlパーサをマスターしたい人のためのチュートリアル等等

今日からCakePHPの勉強

CakePHPの勉強はじめます!

なぜフレームワークを使うか?

今まではフレームワークを使わずに、独自のライブラリを使いながらやってきました。
独自クラスはWebアプリを作りながら、「あれ?この処理前も書いたな」と思ったときに
クラスにルーチンをどんどん付け加えていったものです。
このやり方では、後から後からルーチンが増えていって、肥大化していってます。
当然、昔に書いたコードと最近書いたコードでは、書き方や処理方法が変化してます。
このままの状態を続けるのは望ましくないです。。
やはり作る前に「設計」を考え抜いて作られたライブラリのほうがあらゆる点で優れていると思います。


という状況の中、作ってみたいサイトの構想が浮かんだのでこの機会にライブラリをなんとかした後で開発しようと思います。


、そこで選択肢
・独自ライブラリを1から設計しなおし、すべて書き直す
・既存のフレームワークを利用


自分でフレームワークを開発することのコストパフォーマンスはかなり疑問ですが、
それを実行するにしてもほかのフレームワークを使って経験しておくことは必要だと思います。
これがフレームワークを勉強しようと思った経緯です。

なぜCakePHP?

  • 習得までの時間が短い
    • 上でも書いたように「作ってみたいサイト」のシステムを構築するのが最終目標なので習得までの時間が短いといわれているCakePHPに興味を持ちました
  • 「外部ライブラリに依存していなく、コピーするだけで使える」
    • これは環境に依存しないっていうことなので魅力的です
  • 「なんか流行ってる」
    • ミーハーな自分


ってことで

勉強していきたいと思います!
ブログ「idea*idea」さんがCakePHPを勉強していく過程を詳細に公開してるのですごく参考になります。
俺も勉強の過程や詰まった部分をある程度このブログで公開しながら進めていきたいと思います。
目標は2週間ほどで基本的な部分をマスターすること!
がんばります!

viで画面切り替え時にPoderosaが落ちる

SSHクライアントとしてPoderosaを利用してます。


が、最近SSHでログインした後、viで画面を分割している時に
[Ctrl+W]で画面切り替えしようとするとPoderosaが勝手に終了する。
Poderosaの初期設定で[Ctrl+W]に終了keyが割り当てられてるのかなと思って探してみたけど見つからず。。。
が、[Ctrl+Shift+W]に「Poderosaの終了」が割り当てられているのを発見!


そういえば落ちだしたのはキーボードが小さめのノートPCを使い出してから、、、、
どうやら操作ミスで[Ctrl+W]を押したときにShiftまで一緒に押しちゃってたみたいです(>_<)


「ツール」→「オプション」→「コマンド」画面で「Poderosaの終了」の割り当てを変更して解決。



打ちやすいキーボードがほしい、、いやそれ以前に新しいPCがほしいです。
Firefoxがまともに動かないようなPCはそろそろ限界。

ページランク変更ソフトウェア-サンプルサイトが実際にPR7になってる件について

http://seoken.net/pagerank/
ほっとエントリーで「ページランク変更ソフトウェア」って項目を見かけて
sugeeeeee!と思ってみたらブックマークのコメントも「スーパーハカー現る」みたいに期待通りのコメント。


んで、ローカルでのみページランクの表示を書き換えて見せるソフトとか
がんばって被リンクかせいでね!的なすばらしいマニュアルが表示されるソフトとか
想像しながら実際のサイト見てたらブックマークコメントにサンプルページのリンクが張られているのに気づく。


http://www.500man.com/
なんとページランク10とまではいかなくとも7のサイト!
どうやってこれ作ったのかなーとおもって、ちょっと調べてみました。

×ページランク7のサイトが閉鎖→URLを買取

ブックマークコメントにて

たぶん、もともとページランク7のサイトが閉鎖になってたので、URLだけ譲ってもらったんじゃないかな? 上映の終わった映画の公式HPとか、探せばわりと見つかる。

とあった。なるほど確かにそれなら内容のないサイトでPR7にできますね!


ということでweb.archive.org*1にて昔の内容を確認。下が結果。
http://web.archive.org/web/*/http://www.500man.com/
2006の3,4,5月が残ってる。
下が3月のだけど4、5月も内容は同じ(文字化けしたらブラウザの文字コードをShift JISに)
http://web.archive.org/web/20060502063015/http://www.500man.com/
内容はご覧のとおりノウハウ情報販売サイト。
ってことでページランク7のサイトが閉鎖→URLを買取っていう線はなさそう。

被リンクは?

じゃあ実際の被リンクはどうか調べてみました。
googleで「link:http://www.500man.com/」で検索

http://www.500man.com/ にリンクするページの検索結果 約 5,480 件中 1 - 10 件目 (0.20 秒)

なんと!大量の被リンク!そのページタイトルは、、、

  • Abondance : description des lettres d'information
  • Google Fight : infruntati
  • 60questions.net : Liens utiles
  • La Tr�s Grande Biblioth�que Num�rique doit-elle se b�tir contre ...

と見慣れない言語のページが大量!
しかもそのサイトに飛んでもても当のサイトへのリンクはなかなか見当たらない..

じゃあsite:www.500man.comでググってみると、、、

site:www.500man.comに該当するページが見つかりませんでした。

ええええ!?じゃあこのサイトクロールされてないんじゃ?!


まさかとは思いこのページランク7のサイトのタイトル
「"KEN SEO勉強会 テストページ"」で検索

"KEN SEO勉強会 テストページ"に該当するページが見つかりませんでした。

,,,きっと僕の検索テクニックが足りないんですよね、、、!


そうじゃないとしたら、こういう状況になるにはどういう可能性があるのだろ?
すぐ思い浮かぶのが 1.なんらかの方法で大量リンク集める 2.googleからなんらかの原因でインデックス削除される
ってのが普通はすぐ浮かびますよね。
他に〜すればこういう状況になるよ!とかこうやって検索したら表示されたよ!、とか見つけた人いたら教えてください(>_<


*akiyanさんがが解明してくれました!一番下の追記参照



SEOスパムとかリンクファームとかしてページランクゲット→インデックス削除」って流れが一瞬頭をよぎりましたが
宣伝サイトには

一切のSEO対策などもなく、内容も何もないサイトですが、ページランクだけは7です。

ってあるのでそういう不正なSEO関係の種なわけがないですよね!


第一、不正なSEOなんてするとgoogleの検索結果の信頼性を揺るがす*2ことであって
多くの人に迷惑な上、検索結果から存在を抹消されることになるリスクを背負うことになるので、そんなこと真っ当な業者がするわけないですよね!



もしかしたら、さまざまな国の人*3がリンクを貼りたくなるような波長の電波を送信するとかそういうすごい革新的な技術が用いられたソフトなのでしょうか??

というかページランクはあるけどgoogleからインデックスされてないのが、このソフトの仕様なのでしょうか.
だとしたらページランクを得るためにはgoogleからのインデックス削除を受け入れなければならないという、まさに究極の選択ですね、、、、!
今までどおりの検索結果をえるか、、それとも「ページランク10ゲットしたぜ!!googleからは検索できないけど。」っていう自慢できることを選ぶか、、難しい選択です。。

追記

2/4

はてブにて「クロールを遮断してるのは単にGoogleに発見されたくないからとも考えられる。」との指摘いただきました。確かにそうかも。
もし、もし万が一そうだとしたらGoogleに公開されたら困るようなことしてるヤマしいソフトなんですね、、、!(>_<

2/5

ku- さんから新しい可能性の補足&指摘いただきました。
http://bluenorth.net/

link:〜で繋がっているアドレスの先がブログばっかりだったから、トラックバックの関係があると見た。
あとは、Apacheのhttpd.confの設定などで実際のページ以外で繋がっているみたいです。

なるほど!たしかにこの方法なら今の状況作れますね。


追記2:akiyanさんが解明してくれました!
どうやらUserAgentがクローラだったらページランク7の別サイトに
リダイレクトしている仕掛けだったようです!下記URL参照http://www.akiyan.com/blog/archives/2007/02/googlepagernak.html

なるほど〜。。ってことは当のサイトはやっぱりクロールされなくなるんで
工夫したらなんとかなりそうだけど、今のままのそのソフトの仕様だとやっぱりページランクをとるかかクロールされないか選ばないといけない仕様ですね、、、w

*1:http://www.archive.org/web/web.php

*2:ページランクチェンジャーって名前だけですでに信頼性を揺るがすものであるような気がするのはたぶん気のせい

*3:なぜか日本のサイトはない