やってることを徒然なるまま。。。
(ノ・・)ン。。。。。。(((●コロコロッ
ウノウラボ Unoh Labs:
http://labs.unoh.net/2007/08/php_9.html
http://labs.unoh.net/2007/09/post_104.html
を読んで、
(・υ・)オレドウシテタッケ。
ってことで、
あと、
http://codezine.jp/a/article/aid/689.aspx
ここが( ̄-  ̄ ) ウーンだったので、
クローラについて書こうとしたらだらだら長くなったので、
まぁ笑っとけってことで。
[More:]
●システム基本
言語はなんでも良いと思います。
文字コードはシステム内部およびデータベースはUTF8です。
MySQLの変換抜け落ちが回避でき、
i絵文字もそのまま使える上、
海外製のフレームワークも使えるのでこの方法以外ありえません。
出力はPCとSoftbank3GCのみUTF8、残りはSJISです。
3キャリア対応でページを分けたりは絶対しません。
metaにはcontent-typeとcache-controlを必ず書きます。
content-typeを忘れると表示が狂うこと請け合いです。
cache-controlはauの頑固なキャッシュ機能を殺すためですね。
(はてぶのケータイサイトがauで異常に使いにくいのはこれが理由)
ロボットにindexされることは歓迎ですがcacheされることはお断りなので、
robotsはnoarchiveを付けます。
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<meta http-equiv="Cache-Control" content="no-cache" />
<meta name="robots" content="noarchive" />
HTTPヘッダにはDocomoの時はApplication/xhtml+xml、
それ以外はtext/htmlを打ち込みます。
Content-Lengthは必ず打てと書かれてますが無くても可です。
可能な限りクエリストリングは使わずPATH_INFOで処理します。
vodafoneC型問題が回避でき、
Softbank画像転送制限実装が簡単になり(URL最後に偽拡張子.jpzを付けるだけ)、
クローラ対策にもなります。
RewriteはPATHINFOと効果が同じで好みの問題です。
●キャリア判別
基本的にプログラム上でやってしまうことの方が多いです。
PEAR::Net_UserAgent_Mobileを使ってますね。
●キャリアアクセス制限
サイトによってやるかやらないかは都度考えます。
ただし、個体識別番号を使うサイト・ページでは必ず制限します。(クローラも入れません)
制限自体はApache上でやります。
httpd.conf(または設定ファイル)が操作できるときはそこに、
操作権限がない時は.htaccessに記述します。
顧客納品するような場合はIPリストを、
自社メディア OR 面倒なときはドメインで判別してます。
IP帯域はこのあたりから。
http://www.nttdocomo.co.jp/service/imode/make/content/ip/index.html
http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html
http://developers.softbankmobile.co.jp/dp/tech_svc/web/ip.php
取ってきますね。
帯域クローラは別途用意します。(APIでも作ろうかしら。)
フルブラウザやwillcom,イーモバイルは「ケータイ」ではないので、
許可リストに入れません。
●モバイルクローラ対策
アクセス制限の許可リストにクローラのIPかドメインを加え、
モバイルのサイトマップをrobot.txtに追加します。
各種検索エンジンのサイトマップツールは、
念のため利用しますがあまり当てになりません。
Mobile Link Discoveryというのは初めて知りました。
追加して様子を見ようかと。
クローラからのアクセスかどうかの判別は特別何もしてません。
このあたりは全部Apache上でもできます。
Apacheで分岐、変換といえばRewriteCond, RewriteRuleですが、
結構面倒くさいので使いません。
利用するのはmod_setenvifのsetenv系, BrowserMatch系ディレクティブです。
指定ドメイン(またはIPアドレス)がどのキャリアからのアクセスなのかを定義する時は
SetEnvIf Remote_Host docomo.ne.jp browser=docomo docomo
Allow From env=docomo
SetEnvIf Remote_Addr 210.136.161. browser=docomo docomo
Allow From env=docomo
サブネットが使えないようなのでRemote_Addrでは第4を外すかんじでしょうか。
(やったことないですが。)
レンタルサーバなどはApacheがリモートアドレスを取ってくれないの注意が必要です。
ちなみにSetEnvIfで環境変数を二つ定義するのは、
一つはApache判別用、もう一つはCGIでの利用のためです。
Allow Fromで環境変数を利用するにはenv=●●としか記述出来ないようなのでこうしてます。
browser=docomoと記述するとCGI(PHPなど)で
$_SERVER["browser"] = 'docomo';
と定義され、
その後の利用が簡単になります。
クローラはIP帯域で判別するのは種類が多くてやりません。
その代わりUserAgentでの判別をします。
Allow Fromにクローラのドメイン(公開されている時はIP)を入れておき、
# Google agents
BrowserMatchNoCase Googlebot Crawler=google
BrowserMatchNoCase Googlebot-Mobile Crawler=google
BrowserMatchNoCase Mediapartners-Google Crawler=google
# Yahoo agents
BrowserMatchNoCase "Yahoo\!\sSlurp" Crawler=yahoo
BrowserMatchNoCase Yahoo-MMCrawler Crawler=yahoo
BrowserMatchNoCase YahooSeeker Crawler=yahoo
BrowserMatchNoCase Y\!J-SRD Crawler=yahoo
BrowserMatchNoCase Y\!J-MBS Crawler=yahoo
# MSN agents
BrowserMatchNoCase ^msnbot Crawler=msn
BrowserMatchNoCase SandCrawler Crawler=msn
こんな感じでしょうか。
クローラはこちらを参考に。
http://shoes.tummy-magnet.com/log/eid249.html
百度がdeny入りなのは余談です。
●絵文字
絵文字の取得は過去記事をどおぞ。
docomo(ドコモ)やauの絵文字の抽出をPHPで最も簡単にする方法
iモードやezwebの絵文字を壊さずにSJISからEUC-JPに変換する方法
独自のマップデータを作り、
それにはめ込む形です。
変換は出力時にページ丸ごと一括でやります。
なので、au絵文字は画像ではなくSJISコードを使います。
PCの時はその場その場で使うか撤去するかを考えます。
基本構成はこんなとこでしょうかねぇ。
それにしても面倒ですね。