Browsing articles in "Webサービス"
2月
11
2010

ネットで文章を書くときの基本4原則

ネットで文章を書くときは、以下の基本4原則を忘れてはいけない。

  1. 他人に迷惑をかけるのはやめよう
  2. 他人が見て面白いことを書こう
  3. 同じ内容のものがないか調べよう(質問するとき)
  4. 頭のおかしな人には気をつけましょう

どこの4原則だよそれ

ふふふふ、実は下記から引用しました。

書きこむ前に。。。

2月
9
2010

Stack Overflowのクローン

海外の有名なQ&Aサイトに、Stack Overflowというのがあります。何だか楽しい技術者向けQ&Aサイトです。日本でもこんなのがほしい!

ちなみに、創設者はJoel on Softwareでおなじみのジョエル・スポルスキ(Joel Spolsky)さんです。

というわけで、そんなStack Overflowを作りたい人に向けたStack Overflowクローンの一覧です(というか自分のためのメモ)。

  1. OpenOverflow Ruby, Ruby on Rails, PostgreSQL or MySQL, MIT License
  2. SOClone Python, Django, MIT License
  3. Stacked ASP.NET or Mono, SQL Server, MySQL or その他?
  4. Qwench PHP, MySQL,
  5. CNProg Python, Django, Apache License 2.0

ところで、OSS探ってるといつもASP.NETが地味にいるんですがそんなに需要あるんですかねぇ。。

Joel Spolskyさんの本

Joel on Software Joel on Software
青木 靖

オーム社 2005-12
売り上げランキング : 44381
おすすめ平均

Amazonで詳しく見る

More Joel on Software More Joel on Software
青木 靖

翔泳社 2009-04-09
売り上げランキング : 155402
おすすめ平均

Amazonで詳しく見る by G-Tools

ソフトウェア開発者採用ガイド ソフトウェア開発者採用ガイド
青木 靖

翔泳社 2008-03-20
売り上げランキング : 98313
おすすめ平均

Amazonで詳しく見る by G-Tools

Eric Sink on the Business of Software 革新的ソフトウェア企業の作り方 Eric Sink on the Business of Software 革新的ソフトウェア企業の作り方
青木 靖

翔泳社 2008-09-11
売り上げランキング : 103073
おすすめ平均

Amazonで詳しく見る by G-Tools

BEST SOFTWARE WRITING BEST SOFTWARE WRITING
Joel Spolsky

翔泳社 2008-02-21
売り上げランキング : 129688
おすすめ平均

Amazonで詳しく見る by G-Tools

関連リンク

  1. 『Stack Overflow』から学ぶ最近のコミュニティ構築術 – IDEA*IDEA ~ 百式管理人のライフハックブログ

参考リンク

  1. MOONGIFT: » Ruby on Rails製のStackOverflow.comクローン「OpenOverflow」:オープンソースを毎日紹介
  2. MOONGIFT: » 技術者向けQ&AサイトStack Overflowクローン「SOClone」:オープンソースを毎日紹介
  3. MOONGIFT: » ASP.NETによるStackOverflow.comクローン「Stacked」:オープンソースを毎日紹介
  4. MOONGIFT: » PHP製のQ&Aシステム「Qwench」:オープンソースを毎日紹介
  5. MOONGIFT: » 高性能!StackOverflow.comクローン「CNProg」:オープンソースを毎日紹介
10月
6
2009

Crown

Cronの実験室

こんなの作った。

10月
4
2009

PHP Demo

PHP Demo

こんなやつ作った。

10月
3
2009

よく見かけるサイト風なtwitterのbotを作ってみる

きっかけ

海外のblogのタイトルを日本語に訳して、その記事を紹介してるだけのサイトをよく見かける(例えば、phpspot開発日誌コリス)。もちろん、それ自体を否定する気はさらさら無いのだが、そういうのって、実はある程度自動化でできたりするんじゃないかと思う。そんなわけで、そういう仕組みを作りたいのだが、ちょうどtwitterでbotを作りたいと思っていたので、twitterを土台にしてやってみることにする。

処理の流れ

  1. Web開発者向け記事のまとめサイトの元の記事のフィードを寄せ集めて、取得する。
  2. それをtwitterに流す

以上が簡単な処理の流れ。では、以下にコード(使用するのは、PHP)ありの紹介をする。

ちなみに、めんどくさいので、できるだけシンプルな実装で進めていく。なお、元の記事のタイトルを翻訳するという考えもあったが、BingのTranslator APIがうまくいかなかったのと、Googleじゃ翻訳精度悪すぎだろとかで現段階では不採用とする。

1. フィードを集める

はじめに、なぜもうすでに日本語訳してくれたまとめサイトの方を紹介しないのかというと、それじゃあつまらないとか、元記事も紹介したいので、かぶったときにめんどくさいとか、そういう理由なのである。

とりあえず、人気なサイトが分からないので、適当に挙げてみた候補が以下。

とりあえずなところ、この辺。現段階では。

2. 複数のフィードをいい感じに処理する

サーバーの負荷の軽減や処理をシンプルにするため、できるだけアウトソーシングしたいので、フィードを集めて時間順に並べるのはPipesに委ねることにする。Pipeを作るには、Yahoo.comのアカウントが必要である。たぶん、Yahoo! JAPANのアカウントじゃだめなはず。

Yahoo.comのアカウント登録などは、ここを見てる猛者なら簡単に自分でできるはずなので割愛する。ここでは、Pipeの作り方を紹介する。しかし、何となくそれらしきものをつなぎ合わせてるだけなので以下が本当に正確かどうかはわからない。でも、何も知らなくてもインタラクティブに作れるPipesは本当にすごい。米Yahoo万歳!

というわけで、ここでは一切コードを書かない。

2.1 まず、Create a pipeをクリックする。

pipe0
すると、こういう画面になる。

pipes1

2.2 Fetch Feedを右にドラッグし、フィードのURLを入力する。

pipes2

2.3 Unionをクリックして、それらをPipeでつないでいき、完成

pipes3

Unionはようするにそれらをまとめるものである。

以上で、複数のフィードをひとつにまとめることができる。

え?もう終わり?という感じだが、終わりなのである。

ここでは説明しなかったが、そのほかにも日付順でソートしたり、もっとたくさんのフィードをまとめたり、いろいろフィルターしたりフィード以外の機能等、様々なことがPipesでできる。

3. フィードから情報を抜き出す

simplexml_load_fileを使うと一瞬でできる。ものすごく手続き型で設定もソースの中に書いてるなど、色々突っ込みどころはあるだろうが、シンプルを極める実装なので以下で良いのである。

function getData() {
  $xml = simplexml_load_file('あなたのフィードのURL');
  $time = time() - 60 * 15;
  $data = array();
  foreach ($xml->channel->item as $key => $item) {
    if (strtotime($item->pubdate) > $time) {
       continue;
    }
    $data[] = array(
      'url' => $item->link,
      'title' => $item->titl
    );
  }
  return $data;
}

cronで15分置きにこのPHPを読むと見越して、15分前から今の間に更新されたリンクのみのデータを返す。

4. tweetする

Twitterでつぶやくことは、tweetであってる…よね?参考リンク1のとおりにやったら驚く程すんなり行った。

function tweet($message = '') {
  $url =  'http://twitter.com/statuses/update.xml?';
  $username = 'あなたのユーザー名';
  $password = 'あなたのパスワード';
  $params = "status=". rawurlencode($message);

  $result = file_get_contents($url.$params , false, stream_context_create(array(
    "http" => array(
      "method" => "POST",
      "header" => "Authorization: Basic ". base64_encode($username. ":". $password)
    )
  )));
}

5. full source code

<?php

$startTime = microtime(true);

require_once('SOAP/Client.php');

function getData() {
 $xml = simplexml_load_file('あなたのフィードのURL');
 $time = time() - 60 * 15;
 $data = array();
 foreach ($xml->channel->item as $key => $item) {
    if (strtotime($item->pubdate) > $time) {
       continue;
     }
     $data[] = array(
      'url' => $item->link,
      'title' => $item->title
    );
  }
  return $data;
}

function tweet($message = '') {
  $url =  'http://twitter.com/statuses/update.xml?';
  $username = 'あなたのユーザー名';
  $password = 'あなたのパスワード';
  $params = "status=". rawurlencode($message);

  $result = file_get_contents($url.$params , false, stream_context_create(array(
    "http" => array(
      "method" => "POST",
      "header" => "Authorization: Basic ". base64_encode($username. ":". $password)
    )
  )));
}

function endProcess($message, $startTime) {
  die($message.':'.microtime(true) - $startTime);
}

// データを取得
$data = getData();

// データがなければ終了
if (!count($data)) {
  endProcess("Warning: No data!!", $startTime);
}

// tweetする
foreach ($data as $key => $value) {
  tweet($value['title'].' -> '.$value['url']);
}
endProcess("Success: OK!!", $startTime);
?>

このPHPをcron設定したら自動botの完成である。やったー。パチパチ。
できあがったものはこちら→web_devel (web_devel) on Twitter

※ ちなみに今はレンタルサーバーの性質上、cronの間隔を60分に設定しているため、ウルトラできそこないbotとなっている。

6. 今後の拡張

  1. OOP化するなどして、再利用性、拡張性、自己満足性を高めてみる。
  2. フォロー周り
  3. Feedの追加の効率化
  4. @やDirect messageなど
  5. 翻訳して投稿

参考リンク

  1. PHPでTwitterに投稿 - HIRACCHI H.D.
  2. PHPによる誰でも出来る簡単Twitterbotの作り方 - 遥か彼方の彼方から
ページ:12»

Now loading...

PR

Flickr