A Day In The Boy's Life -76ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

Googleの短縮URL(goo.gl)のAPIが公開されたようですね。

ってことで、そのAPIを使って短縮URLを生成したりgoo.glの短縮URLを展開するPHPプログラムを書いてみました。

APIの操作は、PEARパッケージであるHTTP_Client を利用しています。


なお、APIの操作にあたっては事前にAPI Keyを取得しておく必要があります。

API Keyの取得は、こちら からログイン(アカウントが無い場合は作成)しページの最後の方にある「URL Shortener API」のActivateボタンをクリックして発行します。



goo.glの短縮URLを生成する


まずは、短縮URLの生成から。


- google-s.php

<?php

require_once 'HTTP/Client.php';

$api_key = 'Your API Key';
$url = 'https://www.googleapis.com/urlshortener/v1/url?key=' . $api_key;

// 短縮したい対象URL
$page = 'http://ameblo.jp/itboy/';
// JSONデータの生成
$data = json_encode(array('longUrl' => $page));

$client = new HTTP_Client(null);
// デフォルトのヘッダにContent-Type:application/jsonを指定
$client->setDefaultHeader('Content-Type', 'application/json');
$client->post($url, $data, TRUE);
$response = $client->currentResponse();

// JSONデータを連想配列に展開
$json = json_decode($response['body'], TRUE);
var_dump($json);


URLを短縮したい場合は、APIキーとあわせてJSON形式でURL情報を渡してあげる必要があります。

返り値となる短縮されたURL情報もJSON形式となっています。

また、ヘッダでContent-Typeに「application/json」を指定してあげる必要があります(詳細は後述)。


- 実行結果

array(3) {
  ["kind"]=>
  string(16) "urlshortener#url"
  ["id"]=>
  string(19) "http://goo.gl/6vYtT"
  ["longUrl"]=>
  string(23) "http://ameblo.jp/itboy/"
}

JSON形式のデータの生成と展開は、JSONデータの生成をjson_encode 関数で、JSONデータをPHPの連想配列に戻したい場合はjson_decode 関数があるので、PHPの場合は非常に楽ですけどね。

ただし、上記の関数はPHP5.2以上からしか利用できないため、それ以下の場合はPECLからインストールする必要があります。



goo.glの短縮URLを展開する


お次は、短縮されたgoo.glのURLを元のURLに戻す方法です。


- googl-e.php

<?php

require_once 'HTTP/Client.php';

$api_key = 'Your API Key';
// 短縮URL
$short_url = 'http://goo.gl/fbsS';
$page = 'https://www.googleapis.com/urlshortener/v1/url?shortUrl=' . $short_url . '&key=' . $api_key;

$client = new HTTP_Client(null);
$client->get($page);
$response = $client->currentResponse();

// JSONデータを連想配列に展開
$json = json_decode($response['body'], TRUE);
var_dump($json);


短縮URLの展開方法は、短縮URLの生成よりもシンプルですね。

単純にAPI Keyと一緒にgoo.glで短縮されたURLを引数に渡してあげるだけで元のURLを取得することができます。


- 実行結果

array(4) {
  ["kind"]=>
  string(16) "urlshortener#url"
  ["id"]=>
  string(18) "http://goo.gl/fbsS"
  ["longUrl"]=>
  string(22) "http://www.google.com/"
  ["status"]=>
  string(2) "OK"
}

その他、詳細な仕様はマニュアル も参照してみてください。



おまけ


今回の、goo.glのAPIを使う際にはまったことのメモ。

・ Content-Typeにapplication/jsonを指定


HTTP_Clientではデフォルトで、フォームからデータをPOSTする際の「application/x-www-form-urlencoded」のContent-Typeが使用されますが、これではgoo.glのAPI側がデータを受け取ってくれません。


Unsupported content with type: application/x-www-form-urlencoded

というエラーが返ってきます。

ということで、setDefaultHeaderメソッドを使ってContent-Typeにapplication/jsonを指定する必要があります。


・ HTTP_Clientのpostメソッドの第3引数にTRUE(URLエンコード済み)を指定

HTTP_Clientの第3引数は、送信するデータがすでにURLエンコード済みであるかどうかを指定(デフォルトはFALSEなのでPOSTする際にURLエンコードされる)するオプションですが、これがFALSE(デフォルト)の場合、goo.gl API側でうまくURLデータを受け取ってくれません。


string(232) "{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Required",
    "locationType": "parameter",
    "location": "resource.longUrl"
   }
  ],
  "code": 400,
  "message": "Required"
 }
}

というようにURLデータを送っているのにURL情報を遅れというエラーメッセージが返ってきてしまいます。

これに気づくまでにだいぶはまった・・・。






Simplest Twitter-like dynamic character count for textareas and input fields


「Simplest Twitter-like dynamic character count」は、Twitterの入力フォームのテキストエリア脇に表示されるような、入力した文字をカウントしてくれるシンプルなjQueryプラグインです。

動作については、デモサイト が用意されているのでそちらを参照すればどのようなものかすぐにわかると思います。


ビジネスアプリでも入力フォームに文字制限をするというような仕様はよくありますが、このようにあと何文字入力可能かというのを表示しておけば、ユーザーにとって易しいインターフェースを提供できるかもしれません。

(カウントするのは文字数であってバイト数ではないので、その辺は注意が必要かもしれません)



Simplest Twitter-like dynamic character countの設置方法


まず、jQueryプラグインということでjQuer本体が必要です。

ただし、「Simplest Twitter-like dynamic character count」のソースをダウンロードするとjQueryもバンドルされているため、そちらを利用しても良いでしょう。

両方のソースをドキュメントルート以下の適当なディレクトリに保存しておきます。


利用方法は、簡単でテキストエリアにIDを指定し、そのIDに対してcharCount()メソッドを呼び出してあげるだけになります。


<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/charCount.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $("#your_message").charCount();
    });
</script>
<style>
form{width:500px;}
textarea{
    width:490px;
    height:60px;
    border:2px solid #ccc;
    padding:3px;
    color:#555;
    font:16px Arial, Helvetica, sans-serif;
    }
form div{position:relative;margin:1em 0;}
form .counter{
    right:0;
    top:0;
    font-size:16px;
    font-weight:bold;
    color:#999999;
    }
form .warning{color:#600;}
form .exceeded{color:#e00;}
</style>
</head>
<body>
<form id="form" method="post" action="">
  <label for="message">いまどうしてる?</label>
  <textarea id="your_message" name="your_message"></textarea>
  <input type="submit" value="ツイート" />
</form>
</body>


CSSの部分はソースに含まれるサンプルのものを適用しています。

- Twitter風入力フォームの構築例

A Day In The Boy&#39;s Life-Twitter風入力フォーム

デフォルトだとTwitter同様に140文字から入力文字数をカウントダウンしていきます。

また、Twitter同様に140文字を超えると赤字でマイナス表記となったりします。


これらはカスタマイズ可能で、任意の文字数からカウントダウンさせたり、特定の文字数以下になると警告色に変えたりメッセージを表示させたりすることも可能です。


$("#your_message").charCount({
    allowed: 50,
    warning: 20,
    counterText: '残りの入力文字数: '
});


上記のように、charCountメソッド内にオプションを指定していきます。

カウンターの文字や警告色についてもカスタマイズ可能です。

(サイト内にCSSのオプションが解説されていますので参照してみてください)


- カスタマイズした入力フォームの例

A Day In The Boy&#39;s Life-Twitter風入力フォーム2

最初にも書きましたが、Twitter以外でもこのような入力フォームに文字カウントを用意することでわかりやすいインターフェースを提供できるので、結構用途は幅広いのではないかなと思います。





一応30数年生きていたりするので様々な人を見てきて、こういう人は尊敬できるなとか、普段からそういう風に行動している人の言うことだから信頼しようとかって思える人物像の人っていたりします。



深い知識があって意見に迷いが無い人


根底に「この人、この分野でだいぶ勉強したんだろうな」と思わせる深い知識があって、その特定の分野だけでも自分の言葉できちんと説明が出来るような人は尊敬します。

意見がぶれてもその正誤を判断できるスキルを持ってたり、間違ったことに対して素直に「ごめん」って言ってくれる人も全然悪くは無いと思うのですが、繰り返しになってくると信頼性という意味で低下してきてしまいます。

行き過ぎると頑固とか融通が聞かないという風になってしまいがちなんですけど、それでもその意見が正しいのであれば素直に聞くべきなんでしょう。


エンジニアとして働いている中でも、ある特定の技術領域に深く精通している人っていたりして、そういう人ってちょっと癖があったりその他の分野が疎かだったりするんですけど、それでも自分で確固たる自信を持って物事をいえる領域を築いているのは凄いなと感心します。

例え1つの分野でもその領域での奥深さってかなりあったりするので、それを極めるというのは相当熱心にやらないと到達できないと思うわけです。


言い換えれば勉強熱心な人ってことかもしれません。

深い知識があったとしても、それは昔の話(バージョン○○とかだったら極めたよ)とかだと聞いてても単なる自慢話にしか聞こえなかったりしますし、技術や情報の進歩そのものにきちんとついてきているというその行動そのものが尊敬や信頼の元になっているのかもしれません。

軸がぶれないといっても変な時代の軸で固定化して物事語られても困ってしまいますからね・・・。



褒めて怒ることが出来る人


大体、どちらかに偏ってしまっている人が多いと思うんですよ。

褒めることがうまい人は怒れないとか、口を開けば怒るとか。

その人の気質によってしまうのかもしれませんけど、褒めるところはちゃんと褒めて怒るべきシーンできちんと怒ることが出来る人って凄いなと思うわけです。


褒めることがうまい人って、周りに嫌われたくないって思ってる人もいたりして、下の子とかがミスをしても傷つけたくもないし変にギクシャクした関係になることを恐れたりしてやさしい雰囲気でしか意見できなかったり。

周りから見れば、良い雰囲気作りをするという先輩や上司像に写るんでしょうけど、それって周りの人全てがその心情をきちんと察して行動を改める空気読める人ばかりの集まりならなんら問題ないんですけど、やっぱりなかなかそんな恵まれた環境というのは無かったりするわけで、一部のミスが全員に多大な影響が出ないようにきちんと怒るべき時ところは怒ってあげる人がいないとそれ以外の人から見て「なんだよ!」って雰囲気になってしまったりするんですよね。

要は問題を起さないための行動が問題になってきたり。


人それぞれ褒めて伸びる人と怒られて伸びる人とかがいたりして、それぞれ報酬や怒りってものがモチベーションに繋がったりもするわけですけど、それってその人たちをよく見て理解している人なんだなと思うわけです。

それを使い分けられているというのは、その人への個人的な感情だけでなく周りの雰囲気とかも考慮した行動ができてるんだなと。


もう一つは、褒めるとか怒るとかって自分の感情をきちんとコントロールできないとうまく出来なかったりするので、その使い分けがきちんと出来ている人なんだとも思ったりします。

あまりその人の気分で褒められたり怒られたりするのは良い印象を受けませんよね。

自分の気分がいいから周りも褒めるとか、機嫌が悪いから感情任せに怒鳴り散らすとか。


まぁ、大人の行動が出来る人ってやつでしょうか。



自己犠牲にして笑いを取れる人


笑いが取れるユーモアを持った人って言うのは、周りの雰囲気を穏やかにしてくれたり、その人への敷居を下げてくれたりします。

ただ、周りをネタにするのは得意だけど、自分がネタにされて笑われたら途端に機嫌が悪くなる人もいたり・・・。


チーム内には弄られキャラのような人って必ず1人はいたりもするんですけど、周りを和ませようとその人をしきりに弄ったりしても、その人から見れば多分そんなに気分が良くなかったりもすると思います。

まぁ、そういうキャラとして自分の地位を築いているなら弄られることを喜ぶのかもしれませんけど、比較的そういう特定の人を狙って笑いを取るのって難しいことではないと思ったりしてます。

無茶振りとかしたら大体笑い取れたりしますから。


自己犠牲で笑いを取るのって、周りの誰も傷つけずに雰囲気を変えたりしているわけですよ。

典型的な例で言えば、自分のハゲネタとかね。

自分を犠牲にするってなかなか出来ないことで、それをサラッとする人って凄いなと思うわけです。

ただ、そういう人って若干ピエロみたい扱いになっていて、その人がいるといないとでは雰囲気が全然変わってきたりもするのに、その人への評価って単なる面白い人だけで片付いたり、こういう笑いが取れる人って典型的な「良い人」みたいなキャラが多くって、損をする役回りばかりの人だったりして個人的には残念に思ったりしてます。


誰も傷つけずに笑いを取るのって自分の中にその笑いの武器を持ってるって事で、普段から引き出し用のネタを溜め込んだりしてんだろうなと思ったり。

仕事そのものには関係がないんですけど、仕事のやりやすさって環境や人間関係に大きく左右されるので、産業医雇うぐらいならそんな雰囲気を変えたり、心を落ち着けてくれる人をポジションとして置いてしまったほうがいいんじゃないかと個人的には思ったりもします。



まとめ


全てを持ち合わせてる人ってほぼいない(出会ったことも無い)んですけど、それぞれ1つでも該当するような人は、個人的には凄いなと尊敬します。

特定の技術に長けた人って人を扱うのが不慣れだったり、感情をコントロールできるような冷静な人ってユーモアのセンスが無かったりと、それぞれ相反したり一長一短があったりもします。


自分もどれか一つでも当てはまるようなキャラになりたいなと思ってる今日この頃です。