2012年5月31日木曜日

WordPressで別SiteのRSS Feedを取得する(SimplePie)

get_rss_feed_to_wordpressWordPressを使って、別SiteのRSS Feedを取得したときのMemo.

環境: WordPress 3.3.2

WordPress 2.8からSimplePieを標準で利用できるようになったので、Official Documentを参考にすると簡単に実現できる。

<?php
$rss = fetch_feed('http://example.com/rss/feed/goes/here');
if (!is_wp_error( $rss ) ) {
    // 件数の取得。最大で5まで。
    $maxitems = $rss->get_item_quantity(5);

    // RSSデータを配列形式で取得。最初は0。
    $rss_items = $rss->get_items(0, $maxitems);
}
?>
<ul>
    <?php if ($maxitems == 0) echo '<li>No items.</li>';
    else
    // ループしながら表示する。
    foreach ( $rss_items as $item ) : ?>
    <li>
        <a href="<?php echo esc_url( $item->get_permalink() ); ?>"
        title="<?php echo '投稿日時:'.mysql2date(get_option('date_format'), $item->get_date()); ?>">
        <?php echo esc_html( $item->get_title() ); ?></a>
    </li>
    <?php endforeach; ?>
</ul>

FeedのTitleを取得するには、$rss->get_title();

FeedのURLを取得するには、$rss->get_base();

 

< Related Posts >

2012年5月29日火曜日

郵便番号データをCSVからMySQLへImport

zipcode_download_mysql日本全国の郵便番号をDatabaseに取り込んだときのMemo.

環境: CentOS 5.8, MySQL 5.5.24

郵便番号のデータはCSV形式で郵政省のOfficial SiteからDownload出来る。データ形式を参考に。

参考にしたSite.

 

DownloadしたCSVはEditorで開いてUTF8に変換してもいいし、Command Lineでも簡単に出来る。
# iconv -f=sjis -t=utf8 KEN_ALL.CSV > ken_all_utf8.csv

phpMyAdminから次のSQLを実行して、保存用のTableをMySQL上に作成。

CREATE TABLE zip_code (
    jis        varchar(10)  NULL,
    zip_old    varchar(5)   NULL,
    zip        varchar(7)   NULL,
    addr1_kana varchar(100) NULL,
    addr2_kana varchar(100) NULL,
    addr3_kana varchar(100) NULL,
    addr1      varchar(100) NULL,
    addr2      varchar(100) NULL,
    addr3      varchar(100) NULL,
    c1         int          NULL,
    c2         int          NULL,
    c3         int          NULL,
    c4         int          NULL,
    c5         int          NULL,
    c6         int          NULL
);

MySQLのConsoleにLoginして、ImportするCommandを実行。
# mysql -p -u root
> use `database-name`;
> LOAD DATA INFILE '/tmp/ken_all_utf8.csv'
> INTO TABLE `zip_code`
> FIELDS TERMINATED BY ',' ENCLOSED BY '"';

郵便番号の保守が嫌ならAPIを使うのも手。

 

< Related Posts >

2012年5月25日金曜日

VMware Fusion上のMacのDisk容量を拡張する

vmware_fusion_disk_extendVMware Fusion上のMac(Lion)にXcodeをInstallしようとしたら、「HDDの空き容量が足りない」と怒られたので、既存のDiskを拡張してみたときのMemo。

環境: VMware Fusion 4.1.2, Mac OS X 10.7.4

参考Site

まずはVMware Fusionで作業。

SettingsからDisk sizeを変更する。Snapshotがあると拡張出来ない。

image

拡張後Guest OSを起動して、Applications → Utilities → Disk Utility。

拡張したDiskを選択 → Partitionの画面で、"Partition Layout"をDragして好きなだけ拡張出来る。

image

けど、変更して「Apply」後「Verification failed」のErrorが表示されて、拡張出来ない。既存Diskを選択してVerifyしてみると下記Error.

image

Command + Rを押しながら起動したあとのRecovery画面からRepair Diskする必要があるというので、やってみた。

VMware FusionがInstallしてあるMacはVNCでWindowsから操作しているので、ALT + Rを連打しながらGuest OS再起動。

Disk Utilityを起動してRepair Disk → Partition拡張をやってみたけど、失敗。

半分諦めて、Guest OS起動 → Disk Utility → 余っているSpaceに別Partitionを作成 → 作ったのを削除 → 最初と同じようにdragしてDisk拡張

すると無事完了。。。

まぁ、そんな日もあるよね。

 

< Related Posts >

2012年5月17日木曜日

"SMART Failed"でCentOSが起動しない。Linux Live CDを作成してDataを救出

hdd_troubleある日、ssh経由でyumを打つと途中から応答がなくなった。公開しているWeb Siteも表示されなくなった。rebootも受け付けなくなったので、強制的に再起動してみるとConsole画面に下記のようなMessageが。

環境: CentOS 6.2 x64

IMG_0188

Raid1で構成されているHDDの一つが調子悪くなった(壊れた?)みたい。

このままでもCentOSは起動する。起動してからPingが返ってくるまで、3時間ぐらいかかったから、ほっとけば一応動いたのかもしれない。

今回の場合は、Supportの人がすぐ来たので、HDDを交換してもらう作業をしてもらった。

HDD(250GB)を交換してからMirroringの作業が完了するまで約4時間。

以下念の為にLive CDでDataを取り出そうとしたときに調べたMemo.

 

CDのみで起動できるLinux系のDistributionはWikipediaを参考に。

今回はCentOS LiveCDをDownload。

 

< Related Posts >

2012年5月16日水曜日

Project管理をRedmineでするためにALMiniumをInstallと設定

redmine_alminium_install下記記事を読んで、Redmineを使ったProject管理に興味が出てきて、アジャイル開発の一つスクラム(Scrum)を試してみようとALMiniumをInstallしてみた。

環境: CentOS 6.2 x86_64, ALMinium 1.2.1(Redmine 1.3.3)

ALMiniumはRedmine, Subversionなどアジャイル開発に必要なToolを一括でInstallしてくれる。参考にしたのは下記。

 


ALMiniumのInstall

まずはALMiniumをgitで取得する
# yum install git
# git clone https://github.com/alminium/alminium.git

Install実行(※ディレクトリ名を変えてインストールしようとすると失敗する)
# cd alminium/
# bash ./smelt

httpdやmysqldなど必要なServiceをInstallして、/opt/alminiumにruby applicationとして配置される。

 


Redmineの設定

  1. 管理者でSign In
    (Login: admin, Password: admin)
  2. 管理用のUserを追加
  3. 新規作成したUserでLoginし直す
  4. adminを"Lock"に
  5. "Host name and path"を正しいHost Nameに

 


RedmineのEmail notifications(メール通知)の設定

"Email notifications"に下記Messageが表示されているので、

Email delivery is not configured, and notifications are disabled.
Configure your SMTP server in config/configuration.yml and restart the application to enable them.

今回はServerのSendmailを使うように設定。下記Siteを参考に。

# cd /opt/alminium
# cp config/configuration.yml.example config/configuration.yml
# vi config/configuration.yml

production:
  email_delivery:
    delivery_method: :sendmail

ruby applicationを再起動するにはtmp directoryにrestart.txtを置けばいいらしい。

# touch tmp/restart.txt

もう一度"Email notifications"を表示すると、各種設定が出来るはずなので、設定後は右下の"Send a test email"をClickして確認する。

再起動用のFileは削除する
# rm -f tmp/restart.txt

 

< Related Posts >

2012年5月15日火曜日

[VMware Fusion] CentOS6のVMをCopyしたらNetworkに繋がらない

vmware_fusion_network_prob新しく仮想マシンを作成するために、前に作っておいたOS Install直後の仮想マシンをCopyして起動すると、Networkに繋がらなかったときのMemo.

環境: VMware Fusion 4.1.2, CentOS 6.0 x64(kernel 2.6.32)

Networkを起動しようとすると下記Error

# /etc/rc.d/init.d/network start

Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.

参考になったのは下記Blog

Copy元のNetworkが"eth2"で作成していたのが問題らしい。

 

< 2015/09/14 Modified >
「I copied it」にすると新しいMAC Addressが提供されるので、これに合わせて設定する必要がある。

VMware FusionのSettings → Network Adapter → Advanced Optionsで表示されるMAC Addressを設定する。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0

この設定を(して再起動)すると/etc/udev/rules.d/70-persistent-net.rulesが変更されるので、以下のように最後の行だけ残して削除する。

 

設定Fileを変更
# vi /etc/udev/rules.d/70-persistent-net.rules

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:28:fd:3c", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

最後の行に"eth0"用の記述があったので、それ以外を削除。これはVMware Fusionの設定画面でNetwork adapterを追加、削除したからかもしれない。。。

再起動
# reboot

VMware-toolsをInstallしたら直るという記事もあったけど、VMware-toolsのServiceが起動しなかったので、上記方法で解決。

Network復帰後はyum updateとVMware-toolsのInstallをするのがオススメ。

 

< Related Posts >

2012年5月14日月曜日

Google Books APIをPHPから利用する方法と設定

google_books_api_php前回WordPress向けに作ったGoogle書籍検索を利用するPluginをVersion UpさせたときのMemo.

まずGoogle Books用のAPIが2011年5月に刷新されて、今はこちらの方に注力しているらしい。前のGData APIとJavascript APIもまだ使えるけど、いつ使えなくなるか分からない。詳しくは下記Official Blogで。

やった事

  1. Zend GDataからOfficial Siteで紹介されているGoogle APIs Client Library for PHPに変更。
  2. Google APIs Consoleを使ってAPI Keyの生成と埋込み
  3. Sampleを参考にしながらCustomize

 


Zend GDataからGoogle APIs Client Library for PHPに変更

下記Google Books APIのOfficial SiteからLibraryをDownloadする。

Serverに設置してSampleを実行すると動作確認が出来る。

image

API Keyは設定していなくても動く。

でも、Official Documentには、「公開データを検索するのに認証する必要はないけど、API Keyと一緒にリクエストする必要がある」と書いてあるので、一応API Keyも取得する。

 


Google APIs Consoleを使ってAPI Keyの生成

最近はGoogleのAPIにアクセスするための管理コンソール画面が提供されている。

初めてアクセスする場合は次のような画面

image

「Create Project」して、使用するAPIを選択する

image

一日1000回までなので、2分に1回ぐらいになるように制御する必要がありそう。

API Keyの発行は「API Access」から。

「Create new Server key...」をClickして、ServerのIP Addressを入力する。

image

CreateするとAPI Keyが生成されるので、これをSampleでいうと

$client->setDeveloperKey('insert_your_developer_key');

に設定すればOK.

生成してから、10分ぐらいはDataが取得出来なかったので、ある程度待つ必要がありそう。

 


Sampleを参考にしながらCustomize

"apiBooksService" Classは/src/contrib/apiBooksService.phpに記述されている。Source CodeのCommentが詳しいので読めば何とかなる。

"listVolumes" Methodに渡すOptionはCommentにも記述されているけど、Official Siteの方が分かりやすい。

 

 

< Related Posts >

2012年5月11日金曜日

nginx + php-fpmの環境にAPCをInstallしてWordPressのCache機能を有効に

nginx_apc_wordpress_settingnginx + php-fpm + WordPressの環境にAPC(Alternative PHP Cache)をInstallしてWordPressのCache機能を有効にする方法。

環境: CentOS 5.8 x86, nginx 1.2.0, php-fpm(php) 5.3.10, WordPress 3.3.2, APC 3.1.9



APCをDownload → Compile → Install

APCのDownloadは下記から。

必要なSoftwareをInstallしてCompile
# yum install php-devel
# tar xzvf APC-3.1.9.tgz
# cd APC-3.1.9
# phpize
# ./configure --enable-apc
# make
# make install

Installing shared extensions:     /usr/lib/php/modules/
Installing header files:          /usr/include/php/

APC用の設定Fileを新規作成
# vi /etc/php.d/apc.ini

各設定値は下記Siteを参考に。

php-fpmを再起動
# /etc/rc.d/init.d/php-fpm restart

適当な場所にphpinfoを表示して、APCの項目があるか確認。

image

ちなみにyum経由でもInstall出来る。
# yum install php-pecl-apc

現在のCache状態を確認できる"apc.php"が展開したDirectoryに入っているので、適当な場所に設置しておくのがおすすめ。

image

 


WordPressからAPCを使えるように設定

下記FileをDownloadして/wp-content/の直下に設置する。

# cp object-cache.php /path/wp-content/

これで、さっき設置したapc.phpでcacheされているか確認。

CacheをClearしたい場合は次のCommandを打ったほうが手っ取り早い。
# /etc/rc.d/init.d/php-fpm reload

 


< 2012/06/21 Modified >
この環境で下記Errorが出力されるようになった。

require(): Unable to allocate memory for pool.

APCのErrorらしい。下記を参考に「apc.mmap_file_mask」をapc.iniに追記。

# vi /etc/php.d/apc.ini

apc.ttl=0

apc.mmap_file_mask=/dev/zero

 


< 2012/08/07 Modified >
Cacheする容量が増えてくると安定しないみたい。。。apc.phpを見ながらapc.shm_sizeを余裕のある値に設定して様子見。

 

< Related Posts >

2012年5月10日木曜日

SingaporeのDomain「.sg」をOnly Domainsで取得する

sg_domain個人で「.sg」domainを取得したときのMemo.

Value Domainでも取得出来るのだけども、値段が高い(5910円/1年)ので、Only Domainsで取得、管理することにした。

Only Domainsの場合はS$45.70/year(=約2900円)。

購入手続きを完了するとstatusが「PENDING」になって、下記のうちいずれか2つを送るようにEmailが来た(土曜に登録して、火曜にEmailが来た)。

  • Passport
    パスポート
  • Drivers license
    車の免許証
  • National ID card
    国民IDカード
  • A utility account (no older than 2 months)
    2ヶ月以内の有用(公共)な身分証明書

企業の場合は「Business Certificate(会社証明)」も送るように書いてある。

会社で取得したときは、何も必要なく、登録とほぼ同時にDomainが使えるようになった。おそらく会社の住所とSingaporeのCredit Cardを使ったからだと思う。

とりあえずPassportのCopyとEmployment PassのCopyを送った。

その後...

10時間後:「12時間後に作業完了します。」というEmail

さらに2時間後:「作業完了しました。」というEmail

これでLogin後のDashboardから無事管理出来るようになった。

 

< 2012/10/01 Modified >
どうせならHostingもOnly DomainsにしようかとData Centerがどこの国に置いてあるか聞いてみた。

  • Support CenterはNew Zealand
  • Data CenterはAmerica

にあるらしい。

 

< Related Posts >

2012年5月9日水曜日

nginxでBasic認証を設定

nginx_basic_authapacheで.htaccessと.htpasswdを使って簡易User認証をしていたように、nginxでも実現する方法。

環境: CentOS 5.8, nginx 1.2.0

参考にしたSiteは下記。

 

まずは前の記事を参考に.htpasswdを作成する作業。
# cd /var/www/
# htpasswd -c /var/www/.htpasswd user

apacheがinstallされていない場合は下記を参考に設定する。

次にnginxのconfを設定
# vi /etc/nginx/conf.d/01_hoge.conf

auth_basic    "Secret Area"; 
auth_basic_user_file  "/var/www/.htpasswd";

これを追記。設定を再読み込み。
# /etc/rc.d/init.d/nginx reload

ちなみにnginxのconf全文は下記。

server {
    listen       80;
    server_name  dev.hoge.com;

    root    /var/www;
    index   index.php index.html index.htm;
    charset utf-8;

    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }

    auth_basic    "Secret Area"; 
    auth_basic_user_file  "/var/www/.htpasswd";

    location / {
    }

    location ~* \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        include        fastcgi_params;
        client_max_body_size 20M;
    }

    location ~ /\. {
        deny  all;
        access_log off;
        log_not_found off;
    }

    # if the file is not found, forwarded to index.php (permalinks)
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php?q=$1 last;
    }
}

 

< 2012/09/26 Modified >
auth_basicとauth_basic_user_fileはlocationの外に出さないとsite全体に適用されないみたい。

 

< Related Posts >

Related Posts Plugin for WordPress, Blogger...

Blog Archives