Archive for ‘ March, 2008

GizmodoをPlaggerで全文取得する

ということで、

assets/plugins/Filter-EntryFullText/gizmod.yaml 

author: labs.zsrv.net
handle_force: http://feed.gizmodo.jp/click.phdo.*
extract: <div class="cat">.*?<h2>(.*?)</h2>.*?<div class="entry_body pkg">(.    *?)<div class="entry_bottom">
extract_capture: title body

あまり良い感じではないけど・・・とりあえず。 

Read more

Popularity: 1% [?]

  • Digg
  • Google Bookmarks
  • Google Reader
  • Facebook
  • Delicious
  • FriendFeed
  • Evernote
  • Twitter
  • Share/Bookmark

Airで作るアプリケーション!PHPと通信してみる。

ということで、Airで何かアプリケーションを作ってみようと言うことで、
取りあえず作ってみた。

といっても、せっかくなので外部と通信をしなくてはつまらない。
そんなわけで、まずは実験的な意味を含めて自作のPHPとAirで作った
プログラムを通信させようというのが今回の目標。

まずは、PHPの方については・・・。
まずは、簡単なサンプルを作成するということで、引数2個を受け取り、
その合計値を返すというプログラムを作ることにした。

もちろん、返却はXMLで行う。

と、ソースはこんな感じ。
特に難しいこともなく、ぐっちゃりとハードコーディング・・・。
1年ぶりのPHPでよくわからなかった。まぁいいか。

<?php

  $arg1 = $_REQUEST['arg1'];
  $arg2 = $_REQUEST['arg2'];

  if(is_null($arg1) || is_null($arg2) || !is_numeric($arg1) || !is_numeric($arg2)) {
    $error = true;
  } else {
    $error = false;
    $value = $arg1 + $arg2;
  }
  header("Content-Type: text/xml");
?>
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Header>
    <Args>
      <?php if(!is_null($arg1) && is_numeric($arg1)) { ?>
        <Arg name="arg1"><?php print($arg1); ?></Arg>
      <?php } ?>
      <?php if(!is_null($arg2) && is_numeric($arg2)) { ?>
        <Arg name="arg2"><?php print($arg2); ?></Arg>
      <?php } ?>
    </Args>
    <?php if(!$error) { ?>
      <Result><?php print($value); ?></Result>
    <?php } ?>
    <Status><?php if($error){ print("error"); } else { print("ok"); } ?></Status>
  </Header>
</Response>

 プログラムとしてはとっても簡単だ。
arg1とarg2をGETから受け取り、計算を行いあとは、XMLで返すという
だけの簡単なプログラム。

試しに、サーバーに設置を行い確認してみる。
http://hoge.com/api/plus.php?arg1=10&arg2=2

とこのような感じだ

 

 次は、Airのほうだ。
まずはソースを・・・ 

 <?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
  <mx:Button x="130" y="13" label="=" id="exeButton" width="34" click="plainRPC.send();" />
  <mx:Text x="172" y="15" width="54" id="ansText"/>
  <mx:TextInput x="10" y="13" width="45" id="arg1Text"/>
  <mx:TextInput x="77" y="13" width="45" id="arg2Text"/>
  <mx:Text x="59" y="17" text="+"/>
  <mx:Script>
    <![CDATA[
    import mx.rpc.events.ResultEvent;
    import mx.rpc.events.FaultEvent;
    import mx.controls.Alert;

    public function handlePlain(event:ResultEvent):void
    {
      ansText.text = event.result.Header.Result;
    }

    public function handleFault(event:FaultEvent):void
    {
      Alert.show(event.fault.faultString, "Error");
    }
    ]]>
  </mx:Script>

  <mx:HTTPService result="handlePlain(event);" fault="handleFault(event);" id="plainRPC" resultFormat="e4x"
    url="http://labs.zsrv.net/api/plus.php"
    useProxy="false">
    <mx:request xmlns="">
      <arg1>{arg1Text.text}</arg1>
      <arg2>{arg2Text.text}</arg2>
    </mx:request>
  </mx:HTTPService>  
</mx:WindowedApplication>

 とこのような感じとなった。
注意したい点をとりあえず抜粋してみる。

まずは、後半部分のHTTPリクエストを投げる部分について。

<mx:HTTPService result="handlePlain(event);" fault="handleFault(event);" id="plainRPC" resultFormat="e4x"
  url="http://hoge.com/api/plus.php"
  useProxy="false">
  <mx:request xmlns="">
   <arg1>{arg1Text.text}</arg1>
   <arg2>{arg2Text.text}</arg2>
  </mx:request>
 </mx:HTTPService> 

 

ここだ。
まずは、<mx:HTTPService>の要素についてだ。

 

result="handlePlain(event);" 

これについては、リクエストを投げた後にレスポンスが返ってきた場合に
呼ばれる。つまりはコールバック関数だ。
ソースの上部分に、handlePlain(event)というメソッドが定義されているが、
このメソッドが呼び出される。

また、リクエストについては非同期で処理される。

fault="handleFault(event);" 

については、リクエストを投げる処理が失敗したときに呼び出される。
これもまたコールバック関数だ。

id="plainRPC" 

これは、このリクエストに対するIDだ。
実際にボタンイベントが発生したときにこのIDを使いHTTPリクエストを
起動している。

<mx:Button x="130" y="13" label="=" id="exeButton" width="34" click="plainRPC.send();" /> 

 

resultFormat="e4x" 

これは、リクエスト結果をどのようなフォーマットで受け取るかの定義だ。
e4xというのに設定しておくと、返ってきた結果のXMLを「.」でつなぐことで、
値を取得出来るのでとっても楽だ。
(値の取得方法については後述)

urlやproxyについては解説なしで想像つくとおもうので省略。

 

<mx:request xmlns="">
   <arg1>{arg1Text.text}</arg1>
   <arg2>{arg2Text.text}</arg2>
 </mx:request> 

これについては、つまりはリクエストを投げる際の引数となる。
つまり、arg1Textとarg2Text(二つともテキストボックス)に設定された
値を引数とし、この引数をURLとくっつけリクエスト投げることになる。

少し上の方に戻る。次は、
 

public function handlePlain(event:ResultEvent):void
  {
   ansText.text = event.result.Header.Result;
  } 

についてだ。
ここが、リクエストの処理が返ってきたときに呼ばれるコールバック関数
の実態となる。
ここで、結果を受けている。

どのように取得しているかというと引数のeventから、

event.result.Header.Result; 

という形で受け取っている。
ここで、わかりやすいように先ほど作ったPHPの結果のXMLを下記に書いておく。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Header>
    <Args>
      <Arg name="arg1">10</Arg>
      <Arg name="arg2">5</Arg>
    </Args>
    <Result>15</Result>
    <Status>ok</Status>
  </Header>
</Response> 

となっている。
つまり、結果としては<Result>15</Result>を取得したいわけだ。
XPathで表記すると以下のようになると思う。

/Response/Header/Result 

これを、Airでは、先ほど書いたとおり<Response>をのぞいた、

event.result.Header.Result; 

で取得出来ることになる。「event.result」までがAirとしての構文。
「Header.Result」が、XMLの取得先となる。

以上で無事に、AirからPHPのアクセスを行い足し算結果を取得する
事が出来た。

 

Read more

Popularity: 7% [?]

  • Digg
  • Google Bookmarks
  • Google Reader
  • Facebook
  • Delicious
  • FriendFeed
  • Evernote
  • Twitter
  • Share/Bookmark

iモード.netを使ってみた

3/11よりサービスが開始された、「iモード.net」を早速使ってみた。

 使用量は月額210円かかるが、最初の一ヶ月間は無料。

http://imode.net/

 

サービスとしては、携帯にきたメールをPCでも読むことが出来、また返信も出来る。

当然のごとく、絵文字の表示、記述に加えて、デコ絵文字、デコピクチャ等のデコメールも

パソコン上から編集、送信が出来る。

ということで、結構便利な機能ではないかと思う。

 

携帯を忘れても、このサービスに加入しておけば返信出来る。

また、携帯にも、このサービスにも同じメールが届くので後でまとめて見直したい時

などにもパソコンからみることが出来るので使えそうだ。

 

ただ、不満点も何点かる。

というのも、Firefoxでログインをしようと試みたが、ログイン後真っ白のページが、

表示されてしまい、うまく利用することが出来なかった。(自分だけかもしれないが)

 

仕方ないので、IEを使ってログインをしたが、ここでもいくつか問題が。

まず、半角カナを使うことが出来ない。

変換ソフトにAtokを使っているせいかもしれないが、半角カナも含めて漢字変換の

処理がちょっとおかしいような気がする。

 

と以上、ざっくりこのサービスを使ってみた感想を書いてみた。

また、後日、画面等をアップ出来たらなぁと思っている。 

 

Read more

Popularity: 3% [?]

  • Digg
  • Google Bookmarks
  • Google Reader
  • Facebook
  • Delicious
  • FriendFeed
  • Evernote
  • Twitter
  • Share/Bookmark

VineLinux4.0にWordPressをインストールしてみた

ブログを始めよう!ということで、WordPressをインストールしてみた。
WordPressとはオープンソースで開発が進められているブログで、
自分のサーバーにインストールして使うことが出来る。

今回、これをVineLinux4.0にインストールしてみた。

[WordPress]
http://wordpress.xwd.jp/

まずはダウンロード。

# wget http://osdn.dl.sourceforge.jp/wordpress/27093/wordpress-me223.zip

展開。

# unzip wordpress-me223.zip

解答ファイルを公開ディレクトリにコピー。

# cp -fr wordpress-me223/* ../public_html
# chmod 777 ../public_html
(ウィザードで設定ファイルを書き出してくれるので、パーミッションを 変更しておく)

データベースの設定。

# mysql -u root
# create database wk
(今回データベース「wk」で作成)

# GRANT ALL PRIVILEGES ON *.* TO user@localhost IDENTIFIED BY 'password' WITH GRANT OPTION
(ユーザの作成)

ここまで終わったら、公開ディレクトリにアクセスしてみる。

http://hoge.hoge.com/wordpress/
(あくまで自分の設置したパスへアクセスすること)

あとはウィザードに沿って進めるだけ。簡単!!

ここで、自分の環境だと文字化けが起こってしまった。
ということで、念のために回避策を。

公開ディレクトリ直下で、「.htaccess」ファイルを作成

# vim .htaccess
(以下記述内容)

php_value default_charset UTF-8
php_value mbstring.language neutral
php_value mbstring.internal_encoding UTF-8
php_flag mbstring.encoding_translation OFF
php_value mbstring.http_input auto
php_value mbstring.http_output pass

以上で無事設置することができた。

Read more

Popularity: 1% [?]

  • Digg
  • Google Bookmarks
  • Google Reader
  • Facebook
  • Delicious
  • FriendFeed
  • Evernote
  • Twitter
  • Share/Bookmark

VineLinux4.0でSambaを使ってWindowsからアクセスしてみる

WindowsからLinuxマシンのハードディスクに簡単にアクセスしたい!

ということで、Sambaを使ってファイルを共有を実現してみる。

Sambaを使うとWindowsの「マイネットワーク」からLinuxのハードディスク内を

参照することが出来るのでとっても簡単。 

 

まず最初にSambaのインストール

 # apt-get install samba

これでインストール完了。

その次にサンバの設定を行う。今回はとりあえずWindowsの「マイネットワーク」から、

観れることを目標にする。

ということで・・・簡単に設定を

 

 # vim /etc/samba/smb.conf

(以下変更箇所のみを抜粋)

 workgroup = WORKGROUP

(お使いのWindowsマシンのワークグループ名に合わせる)

 と設定はこれだけ。

この後に、Sambaの起動と、Linux起動時に立ち上がるように登録を行う。

# /etc/rc.d/init.d/smb start
# /sbin/chkconfig smb on

 

以上で完了。

あと、Sambaに対して、アクセスしたいユーザを登録する必要がある。

 

仮に、hogehogeというユーザ(Linux上に既に存在するユーザと仮定)のディレクトリ

にアクセスできるようにしたい場合は、以下のコマンドを使ってパスワードを設定する。

 

# smbpasswd -a hogehoge

(パスワードを入力)

 

これで完了。

あとは、Windowsから「マイネットワーク」を開き、「ワークグループのコンピュータを

表示する」をクリックする。

「Samba Server on….」というのが表示されるはずなので、それを開く。

ここで、ユーザ名とパスワードを聞かれるので、先ほどの「hogehoge」と設定した

パスワードを入力する。

 

これで、無事にLinux上のハードディスクにアクセスできるはずだ。 

Read more

Popularity: 1% [?]

  • Digg
  • Google Bookmarks
  • Google Reader
  • Facebook
  • Delicious
  • FriendFeed
  • Evernote
  • Twitter
  • Share/Bookmark