カテゴリ: 勉強会など

ページ: << 1 2 3 4 5 6 >>

開発合宿3日目

パーマリンク 2008/09/15 23:00:00 著者: kumaold メール
カテゴリ: 勉強会など, PHP

今日は二度寝する間もなく気づいたら8時半で、眠い中起きました。


合宿最終日、ということで今日こそそれなりに仕上げないといけません。

まずは持ち越し課題のデータ取得を、一覧ページを開いた時点でDBにデータが無かったら取得してくるようにし、自然に解析が出来るようにしました。


しかし解析データ追加ページでSQLエラーが出てしまいます。
データ追加自体はできているのでいいんですが、エラーが出ているというのはあまり気持ちのいいものではありません。


エラーを見ていると『duplicate key value violates unique constraint "ips_pkey"』と出て、何故か2重にINSERTが実行されてしまっている状況です。

一瞬出て消えるもう1つのエラーで存在しない「nextval(ips_id_seq)」とか実行されていることをみると、主キーがデフォルトのidでないのが原因のようでした。


そこでモデル内に主キーを設定する一文を追加し、解決しました。

var $primaryKey = 'ip';


最後に、解析・統計ができないと意味がないのでとりあえず実装してみました。


出力結果的にはこんなことがやりたかったわけですが、CakePHPには残念ながらそれが一発でできる関数がないんですよ。

アクセス元ホストアクセス数集計
OCN119
Yahoo! BB49
DION46


find('all')一覧出力+find('count')合計出力でfind('countAll')とか欲しいのに。

要はSQL文で GROUP BY の COUNT(*) すればいいだけなので、find('all')の条件式に無理矢理埋め込んでみました。

$conds = array(
    'fields' => 'Host.org, COUNT(*) AS "Count__org"',
    'conditions' => 'GROUP BY Host.org',
    'order' => 'Count__org DESC'
);


SQL文を直接叩いた方が綺麗な気がするが、まあ動くので良しとしよう。



改訂新版 SQLポケットリファレンス (Pocket reference)改訂新版 SQLポケットリファレンス (Pocket reference)
朝井 淳

技術評論社 2003-06-10
売り上げランキング : 37949
おすすめ平均

Amazonで詳しく見る

開発合宿2日目

パーマリンク 2008/09/14 23:00:00 著者: kumaold メール
カテゴリ: 仕事, 勉強会など

昨日(?)、夜3時過ぎに寝たおかげで寝覚めが悪い・・・


午前中は毎度の問い合わせは重いので、データのキャッシュの実装の下準備としてテーブル設計をし直しました。


総合的に判断した結果、アクセスログ、DNS逆引き、ドメイン情報の3つのテーブルにてリレーションを設定の上データを入れることにしました。


そこで1つ苦労した謎のエラー。これで1時間近く悩みました。

ドメイン情報を入れるテーブル名をCakePHP式に「domains」にすると、謎のエラーが出てfind()、save()などのテーブル操作が一切出来ませんでした。

プログラムやテーブル構造を疑いましたが原因は分からず、仕方なくテーブル名を変更することで解決しました。

おそらく、PostgreSQLの予約名か何かじゃないのかな~と思います。


午後の中間発表からは、ある程度の実データが無いとアクセス解析のしようがないのでデータ入力&検証でほとんど時間を潰しました。

あとは手動操作で1件ずつ取得しているホスト名をまとめて取得とかしたいなぁ

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

開発合宿1日目

パーマリンク 2008/09/13 23:00:00 著者: kumaold メール
カテゴリ: 仕事, 勉強会など

この13(土)~15(月・祝)の3連休、加子母の「ふれあいのかやた かしも」にて開発合宿のため来ています。

内容は、先日書いたブログのアクセス解析を中心にやろうと思います。

とりあえず今日はアクセス元の詳細解析までやろうと思いました。


手順としては、このようになります。

[IPアドレス]→DNS逆引き→[ホスト名]→WHOIS検索→[プロバイダ・組織名]


DNS逆引きは、PHPに便利な関数があってそれ1つで完了です。

$hostname = $gethostbyaddr ($IP);


WHOIS検索では、単純にホスト名を渡すだけでは駄目で、適切なドメイン名に直してから渡さないと検索ができません。

例: ※サブドメインは一部適当です。

test.yahoo.co.jp→ yahoo.co.jp
123.45.67.89.bbtec.net→ bbtec.net
proxy01.city.nakatsugawa.gifu.jp→ city.nakatsugawa.gifu.jp
sv02.metro.tokyo.jp→ metro.tokyo.jp


前者2つは通常規則通りco.jp/netなどの1つ前以降を切り出せばいいのですが、後者2つは地方公共団体ドメインで非常に苦戦しました。


これは、単純にtokyo.jpだけだと『東京ドメイン』という総称しか確定しません。
以下のような長いパターンが、固有のドメイン名になります。

metro/pref/city.県市名.jp
city/town/vill.市区町村名.県名.jp
metro/pref/city/town/vill.県市区町村名.lg.jp


そこで仕方なく、サード/フォースレベルドメインに上記の特定ワードが来たときのみドメインの切り出し範囲を変えるようにして何とか対応させました。


肝心のWHOIS検索部分ですが、シェルから実行した結果をもってきました。

$org = exec("whois -h whois.jp $domain | awk '/[cf]\. \[/ {print $3,$4,$5}'");


日本語で結果を取得するため、WHOISホストにwhois.jpを指定します。

定型パターンの結果を処理するため、awkにて正規表現でc./f.から始まる組織名の行のスペース区切り計算で3-5列目を抜き出すという処理を行っています。



とりあえず今日は詳細なデータ取得が出来るようになったので、良しとします。


毎度データを取りにいくと遅いので、明日はDBによるキャッシュを実装します。



Webドメインマーケティング―ヒットの裏にはオリジナルドメインがあった!Webドメインマーケティング―ヒットの裏にはオリジナルドメインがあった!
宣伝会議

宣伝会議 2008-03
売り上げランキング : 287185

Amazonで詳しく見る
type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

<< 1 2 3 4 5 6 >>

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution free blog software