GANCHIKU.com

5kinjo3 | ご近所さん をリリースしました

今でもメインは、symfony1.4系を使っているのですが、Symfony2 をもっと知るべきだと思って勉強するためにサイトを作ってみました。ついでにアフィリエイトサイトにしてしまえ、ということで、 5kinjo3.com | ご近所さん をリリースしました。年末からちょこちょこ開発を進めていたのですが、意外に時間がかかってしまいました。実は年末年始に読んでいた symblog が気に入ったので、その翻訳もしていて(まだ出していない。。。ひと通りできたけど、校正中)、それを読みながら作ったサイトのようなもんです。なので、実装方法はほとんど symblog と同じ?データベースを使っていないところ以外は。

サービスについて

私自身もヤフーオークションは使うことが多いのですが、送料がバカにならないことがあります。アマゾンに慣れてしまっていると、送料のことを考えずに落札してしまうんですよね。そして、落札商品の実際の送料って余裕で1000円オーバーとかあるんですよね。それだったら、結局安く落札した意味ないじゃん。。。ってことで、もし出品者が近くに住んでいたら、引き取りに行きたいじゃないですか。

特に冷蔵庫とか洗濯機とか送料が5000円オーバーとか余裕であるんですよ。今、使っている洗濯機は実はヤフオクで落札したのですが、近所の人だったので台車を持って取りに行きました。本当は車があると便利なのですが、あまり車の運転が上手ではないので。。。

というわけで、引き取りが可能かもしれない商品を検索するサイトということです。都道府県別に出品者を調べているので、自分の住んでいる、もしくは隣接している都道府県なら引き取りの可能性もあるんじゃないかな、と思ってます。もちろん出品者が「引き取りオーケーよ」って言ってくれないとダメなのですが、一般の出品者だったら、特に問題がないんじゃないかな、と思っています。5kinjo3 では、「一般」のユーザによる「中古」の商品のみを検索対象としているので、だいぶ絞れていると思います。実は、ヤフーオークション API が出たすぐ後に te2te.comというサイトを作ったのですが、まぁ、勉強がてら作ったものであまりマジメにデザインもしなかったのですが、今回はとある仕組みで作っていたデザインがボツったので、それを拡張してもう少しキレイにしてみました。

というわけで、引越しシーズン到来ということで、自分の住んでいる都道府県で、欲しい中古品をオークションで検索して落札してくださいな。

Symfony2 について

今回のサービスは、 Symfony2 の機能をひと通り使ってみようということでやっています。しかし、セキュリティ関係は全く対応していませんし、データベースも使用していません。今回は、TwitterBundle(実際は、twitteroauthのみ使用。。。) と、KnpZendCacheBundle、MakerLabsPagerBundleを使ってみました。あとは Twig のエクステンション、swiftmailer、monologを使ってみました。あぁ。Asseticも使ったかな。ツイートもするコマンドも作ってみました。適当な時間にサイトの URL をランダムでツイートします。

今回のサイトは、データベースを使用していないので、ほとんどキャッシュをさせる必要はないんですよね。十分速い。ただ、ヤフーオークションの API を叩いているので、この結果をキャッシュ化する必要はあるのですが、これは、 KnpZendCacheBundle でやりました。ヤフーオークション API は有難いのですが、やっぱりリクエスト限度があるので、しょうがないかな、と。本当は、予めよく使うものだけ持っておいて、あとはキューとかで非同期でやらせるのがいいのかな、とかは思っています。

次の自分プロジェクトでは、 FOSUserBundle を使ってログインさせたりするものを作ろうとしています。というか、そっちを作っているうちに、とりあえずオークションのところだけ出してみるか、ということで、後に作り始めたこっちのサイトをリリースしてしまいました。

デザインについて

センスはいつものように皆無なのですが、YUI3ベースで作ってみました。YUI2のときからCSSはよく使っていましたが、YUI3のグリッドはよくできていますね。細かいアイコン等のデザインさえ揃っていれば、あとはだいたい自分でできるかな、と思っています。レイアウトで参考にしたサイトは、 nanapi ですね。ヘッダとか、グリッドのサイズとか真似てみました。
あと、Google Web Fontを採用してみました。日本語の無料 Web Font もあるみたいなのですが、結構重いんですよね。。。とても使う気になれない。ということで強引に英数字で表示するサイトとしました。また、 密かにスマートフォン用は、JQueryMobileで作成してありますので、暇なときに見てみてください。

実際はまだこのサービスは途中で、その日の落札が多いオークションを自動投稿するブログみたいなものを作成しておこうかな、とは思っています。ちょっとスパムっぽいかな。

ユーザ管理系だと何があるかなー。そのユーザの知りたい都道府県とキーワードを入力させて、その条件があったときにアラートメールをするとか?出品者にもう少し目立たせたい、ということで使うとか?ユーザ管理とかさせると一気にメンテナンスコストが高くなるので、とりあえずは放置かな。

しかし、いろんなアフィリエイトサイトでは、嫌儲の人が多いせいかあまり名前を大々的に出してやっている人は少ないですね。まぁ、私は名前と写真を出してみました。特に卑しいとも思っていないので。密かに個人でプロデュースしたウェブサービスで、ここまでの完成度のものは、これが初めてかも。今年どうやって食べていこうか考えているので、結構必死なんですよねぇ。今までの人生でアフィリエイトでは、合計5000円くらいしか稼いでいないので、少しはこれが稼いでくれるといいなぁ。せめてサーバ台くらいでも。EC2を使っているので月に5000円くらいかかる!

しかし、 Symfony2 楽しいぞ。アイデアさえ出て来れば、いろいろウェブサービスを生み出せるかもしれない!

お願いがあります!サイトの内容に問題が無さそうでしたら、ツイートや、G+、いいね、はてブをよろしくお願いいたします。

ソーシャル系サービスのリンク数取得について

2012年1月21日

個人的にはあまり積極的には使っていないのですが、Facebookの「いいね」Google+の「+」Twitterの「ツイート数」はてなの「はてブ数」などは、URLに対して行うことができ、そのサイトを見るにあたって参考にするということがあると思います。また、各サービス側では、そのリンク数を表示するウィジェットを用意しており、ホームページのヘッダ等に組み込むことが結構ありますね。
このブログ自体には組み込んでいないですが、まぁ、そのうちに組み込むかもしれないです。たまにはデザインを見なおした方がいいかな、とも思ってるので。

というわけで、それらのサービスのリンク数を取得する方法をちょっと調べてみたついでにブログを書いてみます。

はてなのブックマーク数

みんな大好きはてなさんのサービスです。ブックマーク数に関しては公式APIがありました。

        $url = "http://www.yahoo.co.jp/";
        $url = "http://api.b.st-hatena.com/entry.count?url=" . urlencode($url);
        $data = file_get_contents($url);
        if ($data) {
            echo $data;
        }

ちなみに結果は11400になりました。すごく簡単ですね。

Facebookのいいね数

これも調べたらすぐわかりました。こちらも公式APIになります。まぁ、簡単な例がありましたのでこちらのサイトを参考にしても良いでしょう。[PHP]FacebookのAPIを使って、特定のURLのいいね数を取得する

        $url = "http://www.yahoo.co.jp/";
        $fql = urlencode('SELECT total_count FROM link_stat WHERE url="' . $url . '"');
        $data = file_get_contents('https://api.facebook.com/method/fql.query?query=' . $fql);
        if ($data) {
            $xml = simplexml_load_string($data);
            echo (int)$xml->link_stat->total_count;
        }

ちなみに結果は、11550となります。

Twitterのツイート数

これもググればやっている人が何人かいるので、すぐできます。ただ、どうやらこれは公式のものではないので、変更されてしまう可能性もあります。ここでも、また、ここでも公式じゃないから、それを理解してやってね、的な話になっています。

        $url = "http://www.yahoo.co.jp/";
        $url = "http://urls.api.twitter.com/1/urls/count.json?url=" . urlencode($url);
        $data = file_get_contents($url);
        if ($data) {
            $object = json_decode($data);
            echo $object->count;
        }

ちなみに52704でした。

Google+の+数

なんて読むわからないw これですが、これもググればわかるのですが、あまり日本の方は積極的に調べていないようで、だいたい英語のサイトに引っかかります。また、Twitterと同じく公式APIではありません。ここ辺りを読むと、まぁ、そのうちにできるだろうと思うのですが、非公式の方法で調べることができます。これを実際にやってみると数が取得できます。なんだか「AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ」という文字列が穏やかじゃないですね。というわけで、こんな感じになります。

        $url = "http://www.yahoo.co.jp/";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . $url . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));

        $curl_results = curl_exec ($ch);
        curl_close ($ch);

        $parsed_results = json_decode($curl_results, true);
        echo $parsed_results[0]['result']['metadata']['globalCounts']['count'];

ちなみに結果は、2304になりました。

これらの数ってうまいこと使えばなんか楽しそうな気がするんですよね。今は考えを温めている最中なのですが、いいアイデアがあったら早速組み込みたいなぁ、と。

EC2のデータをS3にバックアップを取る

2008年3月31日
API

ためには、どうしたらいいの?ということで調査中。

正直なところ私はバックエンドに自信がないのだが、せっかくの機会だということで、Amazon EC2にチャレンジしている。そして調べていくうちに、この環境ってすげぇな、と思うようになった。こんな構成よく思いついたね。天才じゃない?

ということで、EC2を使ってホスティングをする予定なのだが、使用しているAMIのインスタンスを落としてしまう(落ちてしまう)と、データは全部ふっ飛んでしまうので、バックアップを取る必要があるのだ。一般のサーバならハードが残っていればなんとか復旧できたりしそうな気もするが、EC2においては、そんなことはできない。というよりも、問題が起きたときには、ハードをゴニョゴニョして復旧をさせるというアプローチはもうやめようぜ、という立場なのだろう。つまり、ちゃんとしたバックアップ構成を組んでシステムを運用するべきだ、と。

そして、そのバックアップのために(それだけのためではないが)、S3というサービスも展開している。でも、どうやってそのバックアップを取ったらいいのだろう、ということがわからなかったので最近はそれを調べていた。

まだ調査中だが、二つの方法があることがわかった。たぶん。

AMIのインスタンスをそのままイメージ化してS3に退避

環境をすべてバックアップする。Amazon Elastic Compute Cloud Getting Started Guide Creating an Imageに書かれているように、構成をすべてバックアップとるので、EC2で運用しているサーバを落としても、AMIの選択で、バックアップしてあるイメージを指定すれば、復旧できる。

s3syncにてディレクトリを指定してS3に退避

必要なディレクトリのみをバックアップする。Using Amazon S3 from Amazon EC2 with Rubyに書かれているように、s3syncというRubyのスクリプトを使って、指定したディレクトリを指定したバケットにバックアップをする。

私が言っているバックアップというのは、サーバに乗っけた自作のWebアプリ自体やそこで使用しているデータベースのことなので、s3syncの方を採用するのだろうな。しかし、リリース時点のサーバの構成のバックアップは取っておくのはいい考えだと思うので、その際には、イメージ化してS3に退避するという方法を採用する必要がありそうだ。

というわけで、使い分ける必要がありそうだ。間違っていたら指摘よろしこ。

というわけで、YouTubeのAPIがGData対応になりましたん。

2007年9月3日
API

私は、ニコニコよりもYouTube派です。

で、どうAPIが変わったか、というところの詳細はここ見てね。
YouTube Data API Developer’s Guide: Protocol
なんかすでにクライアント用のライブラリのリストもあったり。。。
Google Data APIs Client Libraries

Competeを使ってみたが。。

2007年7月23日

Services_Competeに投票しようかみるために、まず、Competeって何?ってとこから始めたよ。

ほむほむ。Webサイトのトラフィックの比較とかをするらしい。
で、Compete Aboutを読むと、

Is this website safe from spyware and other threats like phishing?
How many people visit this site and how does it compare to other sites?
Are there promotion codes for this site that can save me money?

なるほどね。しかし、なんだか、ググルタソができそうなネタのような気もするが、

Today, search engines help us find sites, but they fall short of showing how safe, popular and valuable a site is.

と書いてあるように、今の段階ではしていないみたい。で、Competeは、なんだか独自の方法で評価する仕組みを持っているみたい。それが何かはよくわからんが、何百万もの人の動向を反映しているんだとさ。うーん。ググルタソが少し力を入れれば、速攻できそうな気もするが、その辺どうなんかな。つか、そこにお金儲けの仕組みがあると判断されれば、買収が一番早いのかもしれん。

で、だ。今回使用してみたかったのが、Services_Competeなのだが、CompeteのAPIをラップしたものということだ。CompeteのAPIでは、Compete Site Analyticsで手に入るようなデータをもらえるようだ。そして、それをうまいことマッシュアップしてみたらどうかね、といったものか。

まず、自分のサイトganchiku.comでやってみたけど

Sorry, we don’t have any data for ganchiku.com. With more data, we can cover more sites.

とか言われた。なにー!どうせトラフィックなんてないですよ。うちのサイトは。

というわけで、結構大きなサイトを比較するのがいいみたい。Site Analyticsのページを開くと、mlb.comとnfl.comとnhl.comの比較をしているのがわかる。確かにネットではどのスポーツが見られる人気が高いのかわかるわけだ。なるほどー。ということは、だ。同じようなサービスでどれだけシェアを持っているのかを見るのにいいんじゃね、ということで、SBMサービスを提供しているところを比較してみた。diggとdel.icio.usとhatena。しかし、だ。バグ発見。。。

hatena.ne.jpがne.jpと判断されてるじゃねーか!つーわけで、Contact Usからバグ報告してみた。yahoo.co.jpとかならいけるんだけどね。なぜかne.jpはダメ。バリデーションが変なところで切ってしまっているのだろう。まぁ、おそらく他にもダメなものがあるのだろうね。

本当は、hatena.ne.jpをServices_Competeから使ってみたら、ne.jpと認識されていたみたいで、ソースを見たのだけど、どうも間違っていないっぽかったので、Site Analyticsで試したら、やはり、ということだったのだ。話をうまいことそれに持っていくことができなかったので、無理矢理話を作っちゃった。

続きを読む

Shin Ohno 2003-2012