�ܻؤ�1�顪30�奵��꡼�ޥ�ܥ���������

����IT��Ȥ�Ư��30�奵��꡼�ޥ�Υ��饤�ߥ󥰵�Ͽ

���ƥ��ꡧ PHP

Web����Ѵ������ӥ��Ϥ������󤢤�������ɡ�����������Ѵ����ƽ��Ϥ���ѥ�����Ϥ��ޤ긡���ˤ���ä�����ʤ��ä��Τǥ�⡣

OS��CentOS6��
OpenOffice��JODConverter�򥤥󥹥ȡ��롣
���Τ�����ε������ȡ�

OpenOffice.org��ɥ�������Ѵ��ġ���Ȥ��Ƴ��Ѥ�����ˡ
JODConverter
OpenOffice��Ȥä�PDF�����

# export DISPLAY=:1.0
# Xvfb :1 &
# Xvfb :1 -screen 0 1024x768x8
# soffice -headless -accept="socket,port=8100;urp;" -nofirststartwizard &
# netstat -anp | grep 8100
# java -jar /path/to/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar /tmp/sample.docx /tmp/sample.pdf


    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

�����Ƕ�Ȥ������빽������html�����쥤�ԥ󥰤��뤳�Ȥ�¿���Τǥ�⡣
�ǽ�Ϥ���������Ƥ�������ɡ����ȤäƤ�Τϣ��ѥ�����
�٥���ޡ����Ȥäƺ�®���ä�����Ȥ�����ʤ���ñ�˴��줫�⡣

scrape_func.php

���Υ��饤�꡼���ܤΥ���ץ륳���ɤ˴ޤޤ�Ƥ���ե����롣
http://www.oreilly.co.jp/books/4873111870/download.html
�����Ƚ����񤤤�ľ��Ū�˼�äƤ���롣
$_rawData = getURL($url);
$_rawData = mb_convert_encoding($_rawData, "UTF-8", "auto");
$_rawData = cleanString( $_rawData );

$headline = getBlock("<div id=\"headline\">","</div>",$_rawData,false);

$title = getElement("h1", $_rawData);

XPATH

xpath�Ȥ��Τ�����Ū���Ȥϻפ����ɡ����ä��㤤�������Ⱦ�˵󤲤��饤�֥��������ᤤ�����͡�
�Ǥ����˸¤餺�Ȥ��뤫��������
���Υ֥����Υ����ȥ����㡣
$res = file_get_contents($url);
$dom = @DOMDocument::loadHTML($res);
$xml = simplexml_import_dom($dom);

//�ǿ������Υ����ȥ�
$title = $xml->xpath("//div[@class='hentry']/h2/a/text()");
echo (string) current($title);

//3���ܤε����Υ����ȥ�
$title = $xml->xpath("//div[@class='hentry'][3]/h2/a/text()");
echo (string) current($title);
//3���ܤε����Υ��
$link = $xml->xpath("//div[@class='hentry'][3]/h2/a/@href")

�����쥤�ԥ󥰤ä���ƻ�ʺ�Ȥ���͡�
�ƥ����Ȥ��Ȥˤܼۤ�ư�б�����
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

������GoogleMapsAPI�Ȥ��ν��Ƥ��ä��ꤹ�롣
�����֥��롼�ݥ�ʤ������Ȥ��˻Ȥ��ޤ�����
ñ���APIá���Ƥ�����ʤΤǥ�����٤ˡ�

����ε��� ��CakePHP�۰��־���μ����ȡ�2���֤ε�Υ�׻��Υ���ݡ��ͥ�Ȥ��ɲä�����������⡣

�Ȥ����櫓�ǡ�

App/controllers/components/geo.php

class GeoComponent extends Object {
  public function addr2geo($addr=""){
    $url = sprintf("http://maps.google.co.jp/maps/geo?q=%s&output=json&key=%s",
                   urlencode($addr),
                   'GoogleMapsAPIKEY');
    $res = file_get_contents($url);
    $data = json_decode($res);
    $geo = $data->Placemark[0]->Point->coordinates;
    return array('lng' => $geo[0], 'lat' => $geo[1]);
  }
}
�����ǡ��������Ǥ��ʤ��ä����Ȥ��ν��������ӽ񤤤Ƥ͡���

App/controllers/foo_controller.php

class FooController extends Controller {
  var $name = 'Foo';
  var $components = array('Geo');

  function index () {
    $addr = '����Կ��ɶ迷�ɻ�����38-1';
    $geo = $this->Geo->addr2geo($addr);
    echo $geo['lat']; //����
    echo $geo['lng']; //����
  }
}


���־���򥵡��ӥ��˻Ȥ��Ȥ��⤷�����͡�
����⤤��������äƤ�����Ф����ʡ���
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

20100630211430 �褯���ꤽ���ʤ���ʤ��󤸤Υ���������̡�
���󤿤��������ܥ���ȡ�ID/PASS���Ϥ���ե����ࡣ

���󤿤��������Ϥ�����������ޤ����ɡ��Ȥꤢ��������Ͽ���ޤ���
����ꥢ�Υ����ȥ�������IP���¤Ϥ��ޤ��礦�äƤ��󤸡�


ɸ���Auth����ݡ��ͥ�Ȥȡ�ktai�饤�֥����ȤäƤޤ���

UID�����ꤷ�Ƥ���С֤��󤿤��������פǤ��ơ����Ƥʤ����ID/PASS���Ϥ���UID���ꤹ�뤳�Ȥ�Ǥ���Ȥ�����ǽ��
����ϥȥåץڡ����ǹԤ�����Ǥ���
Cake�ΥС�������1.3

APP/controllers/top_controller.php

class TopController extends AppController
{
  var $name = 'Top';
  var $uses = 'User';
  var $helpers = array('Ktai','Session','Form');
  var $components = array('Ktai','Session','Auth');

  function beforeFilter() {
    $this->Auth->loginAction = '/';
    $this->Auth->autoRedirect = false;
    $this->Auth->authorize = 'controller';
    $this->Auth->allow('index');
    parent::beforeFilter();
  }

  function beforeRender() {
    parent::beforeRender();
  }

  function index () {
    if ($user = $this->Auth->user()) {
      if (isset($this->data['add_uid'])) {
        $user['User']['uid'] = $this->Ktai->get_uid();
        $this->User->save($user['User']);
/* 7/14�ɵ� */
        $user = $this->User->findById($set['id']);
        $this->Auth->login($user);
/* 7/14�ɵ������ޤ� */
      }
      $this->redirect($this->Auth->redirect());
    } else {
      if (isset($this->data['auto_login'])) {
        if ($user = $this->User->findByUid($this->Ktai->get_uid())) {
          if ($this->Auth->login($user['User'])) {
            $this->redirect($this->Auth->redirect());
          } else {
            $this->Session->setFlash('���٤��󤿤������������򤷤Ƥ�������',null);
          }
        } else {
          $this->Session->setFlash('���󤿤�����������꤬����Ƥ��ޤ���',null);
        }
      }
    }
  }

  function isAuthorized () {
    $user = $this->Auth->user();
    $user['User']['last_login'] = date('Y-m-d H:i:s');
    $this->User->save($user['User']);

    return true;
  }
}

��äƤ��뤳�Ȥϰʲ���3����
��ID/PASS�ǥ��������������ơ��֤��󤿤�����������ꤹ��פ˥����å�������Ƥ���С�UID��Ȥäƥơ��֥���ͤù��ࡣ
�����󤿤��������ξ���UID�򥭡���users�ơ��֥뤫��ǡ������äƤ���Auth->login���ͤù���ǥ������󤵤��롣
��isAuthorized()�ǥ�����������������������������򹹿���

users�ơ��֥�

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(10)      | NO   | PRI | NULL    | auto_increment |
| username    | varchar(100) | NO   |     | NULL    |                |
| password    | varchar(100) | NO   |     | NULL    |                |
| uid         | varchar(100) | NO   |     | NULL    |                |
| flag        | int(1)       | NO   |     | NULL    |                |
| last_login  | datetime     | NO   |     | NULL    |                |
| created     | datetime     | NO   |     | NULL    |                |
| updated     | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+


�������å������Ȥ��ʤ����Ӥ��ޤ��ޤ��������󤢤뤿��ʼ��docomo�ˡ����Τ���������˺��ʤ��褦�˥�⡣

APP/config/bootstrap.php

if (!isset($_SESSION)) {
  if ($ini_set) {
    ini_set('session.use_trans_sid', 1);
    ini_set('session.serialize_handler', 'php');
    ini_set('session.use_cookies', 0);
  }
}


2010/07/14�ɵ�
��������κݤ�UID��ơ��֥���ɲä�����硢
$this->Auth->user()�Ǽ���桼���ǡ����ϥ��å����ʤΤǺ��٥������󤷤ʤ��Ȥ����ʤ��ߤ�����
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

�ơ��֥�Υ����Υ����פ�tinyint(1)�ˤ��ơ�save���褦�Ȥ�����������ͤ�����������

  $set = array('type' => 2);
  $this->Data->create();
  $this->Data->save($set);

type��2������褦�Ȥ��Ƥ������ɡ��ǡ����١������Ƥߤ��1�ˤʤäƤ롪��
�����ä��餤�äѤ��ǤƤ����Τǡ��ߤ�ʤ�äѤ�ϥޤ����͡���
���ʤߤ�CakePHP1.3�Ǥ���

Cakephp��tinyint��boolean�ˤ����餷���������ʤ�Ƥ��ä���

CORE/libs/model/datasources/dbo/dbo_mysql.php line474
    if (($col == 'tinyint' && $limit == 1) || $col == 'boolean') {
      return 'boolean';
    }

����ϼº��θ����Ƥߤʤ��ȵ��Ť��ʤ��͡���
̵�̤˻��֤Ȥ�줿��
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

���־������

���־���򰷤��饤�֥��Ϥ������Ȥ��ޤ�����
docomo��i���ꥢ�ǡ��������Ѥ�������̾���֤��Ƥ���ޤ���
http://labs.unoh.net/2008/08/phpgeomobilejp_converter.html
�����vendors/Geomobilejp/�ˤĤä��ࡣ

2���֤ΰ��ٷ��٤���ľ����Υ�����

������򻲹͡�
http://www.pahoo.org/e-soul/webtech/php02/php02-21-01.shtm
�嵭�Υ饤�֥��Υǡ����򤽤Τޤ��ͤù����褦�ˡ�����äȤ���������
�׻���ʬ�Ϥ��ΤޤޤǤ���


�ǡ�������CakePHP�Υ���ݡ��ͥ�ȤǻȤ������ä��ΤǤޤȤ�ޤ�����
³�����ɤ�
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

���������ΤǻȤ�������������Ȥ��Х�����URL�Ȥ���
�Ķ��ˤ�ä��ڤ��ؤ������ʤȡ�

���֡���ȯ�ɤ���Ǥ�Ȥ���Τ�
APP/config/common.php

�Ķ��˰�¸�����Τ�
dev.php��production.php
�ߤ����ʤ��󤸤ˡ�

�Ķ������ꤹ��Τ�
apache��conf��virtualHost�񤤤Ƥ�褦�ʤȤ�����
CAKE_CONFIGŪ��̾���ǡ�������

SetEnv CAKE_CONFIG dev

APP/controller/app_controller.php

������config�����ꤷ����
�ǡ�beforeRendeer��config�˥��åȤ���
view�Ǥ�$config�ǻȤ���褦�ˡ�

  function beforeFilter() {
    Configure::load('common');
    if (isset($_SERVER['CAKE_CONFIG'])) {
      Configure::load($_SERVER['CAKE_CONFIG']);
      $this->config = array_merge(Configure::read("common"), Configure::read($_SERVER['CAKE_CONFIG'\
]));
    } else {
      $this->config = Configure::read("common");
    }
  }
  function beforeRender() {
    $this->set("config", $this->config);
  }
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

zoome��ư��򥿥��Ǹ���

�Ƕ�Υ�����ư��Ϥ�äѤ�zoome�Ǥ���͡�
���̥������礭���������̤��礭�������ӥåȥ졼�Ȥ�⤤��
�˥�ư����������ή��Ƥ��Ƥ�褦�˻פ��ޤ���
�Ȥ����櫓�ǡ�zoome�Υ���������PHP�ǡ�

require_once 'XML/RPC.php';

$arr = array('tagname' => '������',
             'offset' => 0,
             'length' => 10
             );
$params  = new XML_RPC_Value(array(
                                   'tagname' => new XML_RPC_Value($arr['tagname'], 'string'),
                                   'offset' => new XML_RPC_Value($arr['offset'], 'i4'),
                                   'length' => new XML_RPC_Value($arr['length'], 'i4'),
                                   ), "struct");

$msg = new XML_RPC_Message('zoome.tagSearch', array($params));
$cli = new XML_RPC_Client('/xmlrpc', 'up.zoome.jp', 80);
$res = $cli->send($msg);

if (!$res->faultCode()) {
  $data = XML_RPC_decode($res->value());
  /* "Total:". $data['count']; */
  foreach($data['list'] as $key => $val) {
    $zoome = array(
                   'zoomeid' => $val['zoomeid'],
                   'diaryid' => $val['diaryid'],
                   'title' => $val['title'],
                   'url' => $val['diaryurl'],
                   'body' => $val['body'],
                   );
  }
} else {
  exit('CODE:'.$res->faultCode(). ':'. $res->faultString());
}


�ߤ򤤤��Х����Ȥ��ۤ����Ǥ��͡�
�ǥե���Ȥǿ������Ȼפ���Ǥ����ɡ��������Υ����Ȥ��餤�Ϥۤ������ʡ���
¾�ˤ���ƤȤ��Υ᥽�åɤ�����ΤǸ����ɥ�����Ȥ򻲾Ȥ��ƤߤƤ���������

���͡�zoome API(XML-RPC)�ɥ������
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

OpenID�ǥ������󤷤ơ��˥å��͡������Ͽ���Ƥ�餦�褦�ʲ��̤ǤΥХ�ǡ��ȥ�⡣

users�ơ��֥��nickname�����˥Х�ǡ��Ȥ򤫤�������


�����å����ܤ�3�ġ�

  • ��ˡ����ʥ˥å��͡��फ
  • ʸ���������⤫
  • ����ΤߤǤϤʤ���

����Τߤ����Ϥ�function notSpace�ǥ����å���

APP/model/user.php

<?php
class User extends AppModel {
    var $name = 'User';
    var $validate = array(
        'nickname' => array(
                            'notSpace' => array(
                                                'rule' => array('notSpace'),
                                                'message' => '����Τߤ���Ͽ�Ǥ��ޤ���'
                                                ),
                            'between' => array(
                                               'rule' => array('between', 1, 45),
                                               'message' => '1ʸ���ʾ����Ϥ��Ƥ���������������15ʸ���ޤǡ�'
                                               ),
                            'isUnique' => array(
                                                'rule' => 'isUnique',
                                                'message' => '���Ǥ���Ͽ����Ƥ��ޤ���'
                                                ),
                            ),
        );
    function notSpace($field=array()) {
      foreach($field as $name => $value){
        if (preg_match("/^( |��)+$/", $value)) {
          return false;
        } else {
          return true;
        }
      }
    }
}
?>
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

����ʥ���֥���AtomAPI���ݤ��ʤ����ε�������������
�����������ϸ��Ƥ��äѤ�Ʊ���褦�˺��äƤ�ͤ�����ߤ�����

�Ȥ����櫓�ǡ��פ��֤��Ĵ��ľ������
����Υ������Ȱ㤦��ʬ��ԥå����åס�
��äѤ�WSSEǧ�����ݥ���ȤǤ��������줵���̤�Ф��ȤϤ���ʤꡣ


$nonce = sha1(md5(time()));


������ʸ�����������鲿�Ǥ⤤���Ȥϻפ����ɡ�


$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.strtolower(md5($password)))));


�����������դ��ä���
��ʸ���ˤ���󤸤�ʤ�����ʸ���ˤ��롣


���Ȥ�get�ǵ������������������η�̤���post����URL��ȤäƵ������ꤲ��ߤ�����

������Ѥ�����������
³�����ɤ�
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

�Ȥꤢ�����ƥ��Ȥǥ�Х��륵���ȤǺ�äƤߤ褦�ȡ�
��¸�Τܤ����������Ƥ륵���ȡʥͥȥ��ˤΥ�Х����Ǻ�äƤߤ���

�Ȥ��˥�Х����Ѥ˵�ǽ�ɲäʤɤϤ��Ƥ��餺��
�ǥ��꡼���ä���󥭥󥰤������ñ�̤ˤ���ɽ���������餤��
����PC�Ǥ�ZendFramework�Ǻ�äƤ뤱�ɡ���Х����Ǥ�CakePHP�äƤȤ�������ʰ㤤��

2010ǯ1��18����PC�����Ȥǥ�Х����Ǥι��Ρ�
��1���֤η�¬��

���������


moPV

moUU



��Ʊ���֤�PC�ǡ�


pcPV

pcUU



���ͻ�


UU��ߤ�ȡ����ΤޤޤǤ�PC�Ǥ�1/10���餤�Υ桼�����褽���ʴ�����
�ޡ��Ǥ⡢���Υ����Ȥ�9��᤯�Υ桼�����ͥȥ��򥿤ʤΤ�PC�������Ȥ�����Ȥ����������⤤�äƤ��Ȥ���
�������΢���̤ǥ����å����뤳�Ȥ�¿����������
�Ĥ��1��Υꥢ���ʾСˤ���ư��Ȥ��˸��Ƥ�äƹͤ���ȡ����η�̤�����Ǽ����

�����褯����ȥ�Х����Ǥ�PV��1/23��1/24�Ȥ�����������Ǥ롣
����2���֤�������������

�פ���˳��ˤϽФ��ˡ��ȤǤ��äȥͥȥ��äƤ����ѥ�����͡�


�ʤ󤫤����ޤǹͻ��˳ο������Ƥ�äƤʤ��ʤ��ʤ���͡���
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

����˰���³��������GoogleAnalytics��Ƴ����
ľ�ܽ񤤤Ƥ⤤��������ɡ��Ȥꤢ�����إ�ѡ����ͤù��󤿡�
vendor�ˤ��Τޤޤ����ۤ��������Τ��ʡ�

��APP/views/helpers/ga.php

�����Υ���ץ륽������إ�ѡ��Ѥ˽񤭴�����

<?php
class GaHelper extends Helper {
  private $GA_ACCOUNT="MO-XXXXXX-X";
  private $GA_PIXEL="/ga.php";

  function getUrl() {
    $url = "";
    $url .= $this->GA_PIXEL . "?";
    $url .= "utmac=" . $this->GA_ACCOUNT;
    $url .= "&utmn=" . rand(0, 0x7fffffff);
    $referer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : '';
    $query = $_SERVER["QUERY_STRING"];
    $path = $_SERVER["REQUEST_URI"];
    if (empty($referer)) {
      $referer = "-";
    }

    $url .= "&utmr=" . urlencode($referer);
    if (!empty($path)) {
      $url .= "&utmp=" . urlencode($path);
    }
    $url .= "&guid=ON";
    return str_replace("&", "&", $url);
  }
}
?>

��APP/controllers/app_controller.php

���٤ƤΥڡ����ǽФ����顢app_controller�������

<?php
class AppController extends Controller {
  var $helpers = array('ga');

��APP/views/layouts/main.ctp

�ᥤ��Υ쥤�����Ȥ�body������˽񤯡�

<html>
<head></head>
<body>
   ��
   ��
<?php $googleAnalyticsImageUrl = $ga->getUrl(); ?>
<img src="<?php echo $googleAnalyticsImageUrl; ?>" />
</body>
</html>

��APP/webroot/ga.php

���Ȥ�GA�δ������̤���DL�Ǥ���ga.php��webroot���֤��ƽ�����λ��
������ư���Ƥ�ߤ�����

    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

��xml���

<?xml version="1.0" encoding="Shift_JIS"?>

��������ǽ񤯤ȥ��顼�ˤʤ롣
���֤�ߤ�ʺǽ�ˤ���ǤĤޤŤ�������͡�
�����ä��餹���ǤƤ�����

�����ˡ�Ϥ����Ĥ����äơ�
��echo�Ǥ�����
��apache
�Ȥ���

�����echo�ǽФ��ޤ���
<?php echo'<?xml version="1.0" encoding="Shift_JIS"?>'."\n"; ?>

��DOCTYPE���

<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">

��3����ꥢ�̤�DOCTYPEʬ������Υ��
http://ma-san.org/2009/10/htmlphpdoctype.html

��Content-Type�إå��λ���

<meta http-equiv="Content-Type" content="application/xhtml+xml ; charset=Shift_JIS" />

�����apache�Ǥ�����ǤϤʤ���󻪤Ȥ�����Ū�ˤ�����褦�˥������ˡ�
app_controller.php��beforerender�ǽ��ϡ�
*)�Ѿ����beforerender()��parent:beforerender()��˺�줺�ˡ�

APP/controller/app_controller.php

<?php
class AppController extends Controller {
  function beforerender() {
    header('Content-Type: application/xhtml+xml');
  }
}

�����ߥ�졼��

��docomo
http://www.nttdocomo.co.jp/service/imode/make/content/browser/html/tool2/index.html

��softbank
http://creation.mb.softbank.jp/web/web_tool.html

��au
http://www.au.kddi.com/ezfactory/tool/ue/
http://web.archive.org/web/*/developer.openwave.com/ja/tools_and_sdk/openwave_mobile_sdk/SDK62K/Openwave_SDK_62K.exe

��fireMobileSimulator
http://firemobilesimulator.org/
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

����ä�Ĵ�٤뤳�Ȥ����ä��Τǡ����Ȥ��ƻĤ��Ƥ����ޤ���

���ܸ��tweet�������ˡ�Ϥ�����������Ȥ��⤦������ɡ�
����ϥե��������API�ǥ桼���κǿ��Υ��ơ����������뤳�Ȥ��顢
�����ͭ̾�ͤΥե������tweet�򽸤��ʿ���ͤ�Ф��Ƥߤ褦���ȡ�

���֤����׳�Ū�ˤɤΤ��餤��tweet��ʿ���ͤ�Ȥ�����פȤ��ƿ��ѤǤ����ͤȤ��äƤ���Ϥ���͡���
���ä��褦�ʽ���ʤ��ä��褦�ʵ������뤱�ɡ��Ȥꤢ����Ŭ���ʿ��ȤäƤߤޤ�����

�������åȤȤ���ͭ̾�ͤϾ��֤���
���֤���Υե������API�Ǽ�������ʿ���ͤ�����ޤ�����

����äȸŤ�API�λ��͸��Ƥ���page=1�Ȥ��ǥڡ��������ꤹ��äƽ񤤤Ƥ�������ɡ������Υɥ�����ȸ�����cursor�ˤʤäƤ���
̵�̤˥ϥޤä���

����ͤ�cursor=-1�����ꤷ�ơ��쥹�ݥ󥹤�next_cursor���֤äƤ���ΤǼ��Υڡ����򸫤�Ȥ��Ϥ����ͤ����ꤹ�롣
���פ����cursor=1,2,3�Ȥ�����ʤ��ߤ�������

���˽񤤤Ƥ����ñ�ʥХå���äƤߤ��Ȥ�����
�о�Tweet6587tweet
�ȡ�����ʸ����234153ʸ��
ʿ��Tweetʸ����35.5ʸ��
�ʾ�Τ褦�ʷ�̤ˡ�
*)RT�ǻϤޤäƤ�tweet�Ͻ����ޤ�����

���٤���äƤߤƤ��������30ʸ������ä��Τǡ�
���ܿͤ�30��40ʸ���ǤĤ֤䤤�Ƥ����Ǥ��礦�����֤�

tweetLength.php

<?php
$username = "USERNAME";
$password = "PASSWORD";
$target = 'kazuyo_k';

$tweet=0;
$length=0;
$cursor = -1;
for ($i=0;$i<150;$i++) {
  if ($cursor == 0) break 1;

  $url = sprintf("http://twitter.com/statuses/followers.json?cursor=%d&screen_name=%s",$cursor,$target);
  $json = request($url,$username,$password);
  if (!is_array($json->users)) continue 1;
  foreach ($json->users as $key => $val) {
    if(isset($val->status)) {
      //RT�ǻϤޤ�tweet�����Ф�
      if(preg_match("/^RT(.+)/",$val->status->text)) continue 1;

      if (mb_detect_encoding($val->status->text) != 'UTF-8') continue 1;
      $tweet++;
      $length+=mb_strlen($val->status->text, 'utf-8');
    }
  }
  $cursor = $json->next_cursor;
}
echo "tweet  : " . $tweet . "\n";
echo "length : " . $length . "\n";
echo "avg    : " . $length / $tweet . "\n";

function request($host='',$username='',$password=''){
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $host);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
  curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  $result = curl_exec($ch);
  curl_close($ch);

  return json_decode($result);
}
?>
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

�ƥڡ����ˤ�ä��ɤ߹���js���Ѥ������Ȥ��ˡ�
��ñ�ʤ��Ȥ����ɡ��դ�˺�줽���ʤΤǡ�

/path/to/app/webroot/js/foo.js���ɤ߹��ߤ�����硣

��controller

����ȥ�����Ǥϥإ�ѡ��θƤӽФ���
<?php
class HogeController extends AppController {
  var $name = 'Hoge';
  var $helpers = array('Javascript');

  public function index() {
  }


��view

�ӥ塼�Ǥ�addScript��<head>������˵��Ҥ���롣
($scripts_for_layout����ʬ)
<?php $this->addScript($javascript->link('foo')); ?>

���ξ��˽��Ϥ��������Ϥ��Τޤ�
<?php echo $javascript->link('foo'); ?>

��layout

�쥤�����ȤϤȤꤢ��������ʤ��󤸤�$scripts_for_layout��񤯡�
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<?php echo $scripts_for_layout; ?>
</head>
<body>
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

�ɤ�Twitter��ڤ���٤�����
�ʤˤ��ڤ����Τ����ޤ����褯�狼���Τ�
��ʬ�Ƕ�̣�����Ƥ�褦��API�Ȥäƥ����Ⱥ��ޤ�����
����CakePHP���������ͤơ�

��������EC������ô���äݤ����ߤ����פ򥭡���ɤ˽���Ƥߤޤ�����

�Ȥꤢ�����֤äѤʤ����ߤǺ�ä��Τ���Ȥ��겡���ʴ����Ǥ���


����˾�ʤ���

Íß˾¤Ê¤¦

����å�����ä��ꡢ�⤦����äȥꥢ�륿��������������Ȳ�������¿������Ȼפ��ΤǤܤ��ܤ����ޤ���
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

�����livedoorBlog��AtomAPI������˰���³������֥����ä��㤦�����Ȼפä���ϥޤä���
Ʊ��AtomAPI����������Ʊ���ǹԤ���������Ȼפä���㤦�餷����

��������Ĵ�٤Ƥߤ��WSSEǧ�ڤ��ȼ��ݤ���
�Ǥ⤤����Ĵ�٤Ƥ�Ʊ���褦�˺��äƤ�ͤϤ��Ƥ⡢��褷�Ƥ�ͤ����Ĥ���ʤ�����

�ɵ����ݤ��ޤ�������(2010-02-03)  >>������ε����ء�



����ޤ�Ĵ�٤�livedoorBlog�Ȱ㤦�Ȼפ�����ʬ��pass_digest�κ�����ʬ��

livedoorBlog
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$password)));

����֥�
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.strtoupper(md5($password)))));

�ѥ���ɤ�md5�������Ȥ���ʸ��������餷���Ȥξ���
�ǥޤ��ۥ�Ȥ��狼��ޤ��󡣡�

�֤äƤ���쥹�ݥ󥹤�
CurlResponse Object
(
    [body] => 
X-WSSE authentication required
    [headers] => Array
        (
            [Http-Version] => 1.1
            [Status-Code] => 401
            [Status] => 401 Unauthorized
            [Set-Cookie] => BIGipServerPool_comment=3395622060.20480.0000; expires=Sat, 17-Oct-2009 01:32:13 GMT; path=/
            [Date] => Fri, 16 Oct 2009 02:18:33 GMT
            [Server] => Apache
            [Content-Length] => 83
            [Content-Type] => application/x.atom+xml
        )

)

����������ʤ󤫰㤦�Ȥ��Ǵְ�äƤ�Τ���������
������Ѥ��������ɤϰʲ���

³�����ɤ�
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

app/vendors/shells/�ʲ��˥ե�����������

/path/to/app/vendors/shells/foo.php
<?php
class FooShell extends Shell {

  var $uses = array('Hoge');

  function bar(){
    $this->args[0]; /* ���ޥ�ɥ饤�󤫤�ΰ��� */
    /* ���� */
  }
}
?>


cron�ǻ��Ѥ��륱������¿���Ȼפ��Τǡ������Τ褦��-app��app�ǥ��쥯�ȥ�Υѥ������ꡣ
/path/to/cake/console/cake foo bar -app /path/to/app/
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

����ε����˰���³��AtomAPI�ѡ�
PHP��cURL���ѡ�

<?php
require_once 'cURL.php';

$atomapi_url = "http://cms.blog.livedoor.com/atom/";
$livedoor_id = "your livedoor id"; /* livedoorID */
$password = "your password"; /* �ѥ���� */
$category = "1"; /* ���ƥ��� */
$title = "sample"; /* ���������ȥ� */
$text = "content"; /* ������ʸ */

$created = date('Y-m-d\TH:i:s\Z');
$nonce = pack('H*', sha1(md5(time())));
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$password)));
$wsse =
  'UsernameToken Username="'.$livedoor_id.'", '.
  'PasswordDigest="'.$pass_digest.'", '.
  'Nonce="'.base64_encode($nonce).'", '.
  'Created="'.$created.'"';

$text64= base64_encode($text);

$rawdata =
  '<?xml version="1.0"?>'.
  '<entry xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">'.
  '<title type="text/html" mode="escaped">'.$title.'</title>'.
  '<dc:subject type="text/html" mode="escaped">'.$category.'</dc:subject>'.
  '<content type="application/xhtml+xml" mode="base64">'.$text64.'</content>'.
  '</entry>';

$headers = array(
              "X-WSSE" => $wsse,
              "Content-Type" => "application/x.atom+xml",
              "Cache-Control" => "no-cache",
              );

$curl = new Curl();
$curl->headers = $headers;
$curl->options = array("POSTFIELDS" => $rawdata);
$res = $curl->post($atomapi_url);
?>
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

cakePHP��ȤäƤߤ롣
PHP����ե����2009������ε����ˤǤ���ѼԤ�����¿���ä��ե졼������
MVC�Υե졼�����Ȥä����Ȥ���ͤˤϤ狼��䤹���ǥ��쥯�ȥ깽����

�����ޤǤΥ���Ĥ�Ĥ顣

���ܹ�����post_types�ơ��֥�ξ���

����ȥ�����URL: ��ʣ����/post_types/�᥽�å�̾/�ѥ�᡼��
����ȥ����顧 ��ʣ����PostTypesController (extends AppController)
��ǥ롧 ��ñ����PostType��(extends AppModel)
�ӥ塼�� ��ʣ����app/views/post_types/�ƥ᥽�å�.ctp

��ǥ�

  • �ơ��֥�μ祭���ϡ�"id"�Ȥ����ե�����ɤǡ�primary��auto_increment �Ǻ��Τ����ܡ�
  • "��ǥ�̾_id"�Ȥ����ե�����ɤ�������ǡ�¾�Υơ��֥��ǥ�ؤγ��������Ȥ������ꡣ �㡧users �ơ��֥����ˡ� "post_id" ����������͡�posts �ơ��֥�� id �ò»²¾È¡ï¿½ "post_type_id" ��������� post_types �ơ��֥�� id �ò»²¾È¡ï¿½
  • "created" (DATETIME)�Ȥ����ե�����ɤ������������ǡ��������ǡ���������Ȼ��֤���ưŪ�˵�Ͽ��
  • "modified" (DATETIME)�Ȥ����ե�����ɤ������������ǡ��ǡ�������������뤿�Ӥ˻��֤���ưŪ�˵�Ͽ��
  • "updated" (DATETIME)�Ȥ����ե�����ɤ������������ǡ��ǡ�������������뤿�Ӥ˻��֤���ưŪ�˵�Ͽ��
  • "title"�Ȥ����ե�����ɤ���ȡ����Υڡ�����ɸ��Υ����ȥ�̾�Ȥ������Ѥ���롣
  • "name"��"title" �Ȥ����ե�����ɤ���ȡ��������黲�Ȥ��줿���ˡʻ��꤬�ʤ���Сˤ����ͤ����쥯�ȥܥå����ʤɤΡ��������̾�פȤ��Ƽ�ưŪ�����Ѥ���롣(����������ȡ�generateList()�ΰ��������ꤵ��Ƥ��ʤ����ˤϤ��Τ褦��ư���Ȥ������Ȥˤʤ�ޤ���)�ɤ����ʤ���С�id���ͤ�����ǥå����ȹ���̾��ξ��������ޤ����ʤ��Τ�����ν����ϡ�model_php4.php�� model_php5.php �˽ñ¤«¤ï¿½Æ¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½

�ӥ塼����Ϥ���ɬ�פ��ʤ��᥽�åɤξ��

<?php
$this->autoRender = false;
?>
���졢���Хơ��֥�ɬ�פʤΡ����������äƻפäƤ��ޤä����� ������⡣

�ơ��֥�̤���ѥ�ǥ롢��ǥ�̤���ѥ���ȥ�����

��DB����Ѥ��ʤ���ǥ��$useTable = false;
����ǥ����Ѥ��ʤ�����ȥ������ var $uses = array();���ޤ��� var $uses = null��OK��
    ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

¤³¤Î¥Ú¡¼¥¸¤Î¥È¥Ã¥×¥Ø