PHPに惚れました

今でも多分惚れてます。

PHP+GPSで現在位置情報を取得する

今日はPHPでGPSを扱う練習を〜(もちろん位置情報の取得は携帯でです。)

1から組むのは当然大変そうなので「PEAR::Net_UserAgent_Mobile_GPS」を利用しました。

GPS検索を扱う際、3キャリアでコードが違ってきますがそれを解消してくれるスグレモノです。

ちなみに最新バージョンも0.1.1と開発途中ですが、GPSが絡むサービスはコレを使うのがもう一般的らしいです。

まずはNet_UserAgent_Mobile_GPSのインスコ。
位置情報(緯度経度)の取得だけならこれ以外に入れるものは特にありません。

<?php
    //まずはライブラリをインクルード。
    require_once 'Net/UserAgent/Mobile/GPS.php';

//try-catchで例外にも対応させます。
//ここでよくある例外ってのはモバイル端末以外からアクセスされた時の処理。
//モバイル端末からアクセスしてね!ってな感じのエラー文が表示されます。
try {
    $g = Net_UserAgent_Mobile_GPS::factory();
} catch (Net_UserAgent_Mobile_GPS_Exception $e) {
    var_dump($e->getMessage());
    exit();
}

//取得後の処理を行うページ
$url = "http://ddhost.no-ip.info/deltacolors/t.php";
//リンクに表示する文字
$str = 'GPS.TEST';
//各キャリア毎のリンク取得
$glink = $g->getGPSLink($url, $str);

print $glink["tag"];

?>

リンクの生成はこれでOK。

次に、値を取得し処理を行う。

<?php
require_once("Net/UserAgent/Mobile/GPS.php");

//小数点以下60進数の値を10進数にへ関する関数
function dmsToDeg($dms){
    $dms = array_pad(explode('.',$dms),4,'0');
    $deg = $dms[0] + $dms[1]/60 + ($dms[2].'.'.$dms[3])/3600;
    return round($deg,9);
}

$res = $g->getGPSResponse();
print dmsToDeg($res['lon']);
print dmsToDeg($res['lat']);
?>

これで緯度経度が取得出来た。

後はこの数値を元に都道府県や市区町村を取得する「逆GeocodingAPI」にかければOK。

逆GeocodingAPI参考サイト
座標から地名を取得する逆GeocodingAPIのまとめ + サンプル : アシアルブログ


[お願い]
ただし自分の携帯でしかチェック出来ないので取得結果をコメントで報告してくれたら助かります。

テストページQRコード
f:id:Xephy:20100210042846p:image

URL:
http://ddhost.no-ip.info/deltacolors/t.php

短縮URL:
http://bit.ly/92pP5r

欲しい情報まとめておきます。

    • 緯度経度の数値([←]の部分)が表示されたかどうか。
        • Simple_XML_Elementの表示の可否は結構です。
    • 機種名
    • Simple_XML_Elementが「検索範囲外」と出た時は位置取得を試した都道府県(差し支えなければで結構です)

twitteroauth.php(0.2.0-beta2)を利用してPHP+OAuthでTwitterへPOSTする

ニコエコの[視聴履歴]のために使用してるTwitterbotへのPOSTを
PHP+OAuthでTwitter - SDN Projectを読んで自分もBasic認証からOAuthに移行しました。
説明が丁寧で移行も実際とても簡単でした。
今年の6月にはBasic認証が廃止になると聞いて今のうちに変更。


さて、ここからが本題。
SDN Projectのサイトでは0.1.1のソースを使用して話を進めてられています。

0,2.0-betaを使うとエラーが出てしまうという指摘も本文を見れば多いようです。


そのエラーの原因はここ。
「■実際にPHP+OAuthでTwitterにPOSTする」の

require_once("twitterOAuth.php");

・・・略
$req =$to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>"Test OAuth update."),"POST");
・・・略

twitteroauth.php(0.2.0-beta2を使用する場合の修正箇所)
誤:$req =$to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>"Test OAuth update."),"POST");
正:$req =$to->OAuthRequest("https://twitter.com/statuses/update.xml","POST",array("status"=>"Test OAuth update."));

0.1.1と0.2.0-beta2でファイル名を正し、第2引数と第3引数を入れ替えるだけ。
0.1.1から0.2.0になった際、何故か仮引数が逆になったみたいです。

ややこしいなぁ。

タグ検索をちょこっと更新

タイトル通りちょこっと更新しました。

    • ヘッダー部分の検索フォームを気持ちオサレに。
    • 検索語に動画IDが指定されたら本家同様「もしかして〜〜をお探しですか?」と表示。

「もしかして〜〜をお探しですか?」に関してはそう多く見られない現象だと思いますが、
指定した動画IDによっては処理がもの凄く遅くなってしまうことがあります。(特にサムネイル画像の取得)

今のところちょっと原因は分かってません。
本家ではさくっと取得できてるのでこちらのJavascriptのコードに不備があるのかも。

なるべく原因がわかり次第すぐに修正します。

f:id:Xephy:20100124001432p:image

今回のニコエコの大幅な仕様変更について

本日数か所、表示や動作を変更しました。

いくつもの変更箇所があり、サイト内のニコメモにも変更箇所を記載しましたが、
全て把握しきるのは困難だと思うので、ここにまとめます。

[仕様変更の経緯]

本日、以前から利用してくれている友人に3時間に及んでサイトについての意見や要望を聞かせて貰いました。
もっともだという意見もあれば、ちょっとそこは譲れないなって意見もありましたが
初めて訪れるユーザーさんの視点に立つと、なかなか納得出来る意見が多かったので反映させてみました。

コンテンツの名前が分かりにくい

先日mylistAPIをmylistViewerと変更しましたが、その他コンテンツも数回訪れ利用し、
常連と化してくれたユーザーさんには分かっていただけますが、
初めて訪れたユーザーさんには少し敷居が高く感じるコンテンツ名となっていました。
コンテンツ名の下に補足もありますが、直感的には分かりにくいでしょう。

nicoMemoがいい例です。nico○○と統一していたコンテンツ名ですので、
「nicoMemoも何かしら出来るコンテンツかと思った。」と言われてしまいました。

基本日本人が利用するサイトは日本語表記で。

コンテンツも多くなってきたからどこで何が出来るかをまとめたページが欲しい

ここにnicoMemoってまとめたページがあるんだけど・・・
「えっ!知らなかった! ってか分かりにくすぎww」

ですよね〜。確かにこんなとこじゃ分かりにくい。
nicoMemoを「概要」と名称変更し、ヘッダーへ移動しました。

ランキング、mylist、検索によって出た動画一覧から[mp3抽出]を押す事はまずない。

確かに自分でもランキング一覧から押した事はありません。
大体は動画を見て、気にいった動画があればニコさうんどさんのとこでmp3を落とす。
このような流れになると思います。

なので削除。

左メニューからマイリストビュアー、再生ページへ飛ぶことはない。

大概は動画再生ページへの入口はランキング系ページやマイリスト、タグ検索からとなるでしょう。

これは真っ先に削除。

自動リンクのリンク先はニコエコ内だけでいい。どうせ本家はアクセス弾かれるんだし。

元々うちのサイトは本家が見れない環境下でもニコニコ動画が見たいという人たちの為に作ったサイト。
なのに本家へのリンクがメインの様な表記になっている。
初めて訪れたユーザーは本家となる前者を押してしまうだろう。
それでまたアクセスが弾かれてエラーが出たら「あれ?見れるんじゃないの?」ってなる。

と、混乱を招くので本家へのリンクを削除。
ランキングやマイリストの「動画タイトルのリンク=本家で再生」や「動画再生のリンク=ニコエコで再生」は
自宅からのアクセスも考慮して統一する予定は今のところありません。

あまり不要な情報は全てのページに共通して置くほどではない。

    • 今まで上げた動画
    • 連絡先
    • ミニツール
    • Twitterユーザ用web拍手

この四つはユーザーさんにあまり有用な情報ではない。
確かにアクセスもあまりありません。「今まで上げた動画」は時々見てくれている方もいますが、
少なくとも残り3つは不必要といってもいいでしょう。

ニコメモを「概要」と名称変更し、そこに移設します。

ヘッダー直下の最新情報は一度見れば十分。全ページに表示する必要もない。

これも同上。トップページのみで十分だ。という結論に。

再生ページのタグからタグ検索へ飛んでそのまま検索できるようしなかったの?

これは言われるまで忘れてました。。
先日作ったタグ検索のコンテンツですが、フォームからの検索だけではなく、
せっかく動画再生ページでタグを表示してるのに何でそこから検索出来るようにしないの?と言われてしましまいました。

言われた途端電流走りました。

確かにこれはせっかくあるのにもったいない。
帰宅後、すぐに実装しました。
http://ddhost.no-ip.info/deltacolors/tag/検索語 で検索が出来ます。

もちろん検索語はURLエンコードしてくださいね。

マイリストチェッカー(旧:anotherMylist)はクッキーで保存してるんだよね?だったたら実習室など講義の度に席移動のある学校だったら意味をなさないんじゃないか?

むむむ、確かに。
インポートが出来ると入ってもそんなしょっちゅうする作業でもテキストファイルを持ち歩く事もないでしょう。
自宅でマイリストチェッカーとして使う分には威力を発揮できると思いますが・・・

    • 上がった案としては、視聴履歴(旧:nicoHistoryの様に)皆で共有できるコンテンツを作る。

それには荒らし対策も考慮しなければなりませんが・・・

    • クッキーではなくパスとなる値を入力→そこからハッシュ値でユーザーを判別サーバー上にクッキーの時と同じようなフォーマットで保存する。

これはいいかもしれません。
が、もう少し様子見。


奥にもっといいのがあるかもしんないだろってとーちゃんが言ってた。


本日は8,9か所の変更となりましたがまだ要望や変更箇所はあります。

公式ランキング、旧形式ランキング、オリジナルランキング、過去のランキングをグループ化。

似たようなコンテンツや要素は集約するべき。「ランキング」と統一し、ツリー構造として以下のように表示させるつもりです。

    • ランキング
        • 公式ランキング
        • 旧形式ランキング
        • オリジナルランキング
        • 過去のランキング

検索もDB検索とタグ検索ラジオボタンで切り替えて検索対象を切り替えられたらいいな。

出来ない事はないですが少し手間がかかりますね・・・
それにDB検索は少し応答が遅いので、サクサク快適に検索出来るタグ検索を巻き込むのはちょっと・・・と後ろめたさが。

タグ検索をコンテンツとしてではなくどこからでもすぐ検索出来るようにヘッダーの右端など、常に表示して欲しい。

本家でもどこのページからでも検索できますもんね。検討中。
1/15 17:30実装

トップページの更新情報は最新情報のボックスに集約して、広いスペースはもっと別のものに使った方がいい

確かに最近の更新ペースを考えるとあの領域だけでも足りています。

しかし空いたTOPページにあの領域に何を置こうか・・・
未決定なので保留です。



とりあえず今はこんな感じです。


告知もなく突然の変更申し訳ないありません。

nicoTagSearch製作中に書き残したメモ

ベースURL:http://www.nicovideo.jp/tag/検索語?ページ指定&ソートの種類&rss=2.0

検索語:URLエンコードされたもの

ページ指定:XMLに残り何ページあるか数値のみのパラメータは無い

ソート指定:
投稿が新しい		sort=f
投稿が古い		sort=f&order=a
コメントが新しい		sort=nもしくは無指定
コメントが古い		sort=n&order=aもしくはorder=aのみ
再生が多い		sort=v
再生が少ない		sort=v&order=a
コメントが多い		sort=r
コメントが少ない		sort=r&order=a
マイリストが多い		sort=m
マイリストが少ない		sort=m&order=a
時間が長い		sort=l
時間が短い		sort=l&order=a
検索クエリのパターン(wordは必須)
word	sort	page
 ○	 ○	 ○
 ○	 ×	 ×
 ○	 ○	 ×
 ○	 ×	 ○

タグ検索で取得出来るパラメータ
・動画タイトル
・リンク(本家)
・サムネ
・投稿者説明文(一部)
・再生時間
・投稿日時

新コンテンツ(nicoTagSearch)を投下しました。

本家にタグ検索のRSSを発見したので早速2日で作ってみました。

今回はユーザーからのテキストエリアによる入力があるって事で結構慎重でした。

今回もAjax使用。
ページ遷移が無いのでサクサク検索できるかと思います。

nicoTagSearchはこちらから利用出来ます。nicoTagSearch

スクリーンショット
f:id:Xephy:20100111102122p:image

テスター

βテスター頼まれた。

高校生プログラマーなにがし君製作の
http://twihapi.com/

『 Twihapi(ついはぴ)』とは、Twitterユーザーの誕生日を登録し、
ついったー友達の誕生日を教えてくれるサービスです。

テスト中に色々気になるとことか皆で指摘して行ってたけど対応早いw


ちなみに自分のページ
http://twihapi.com/u/Xephy_dc