ラベル Perl の投稿を表示しています。 すべての投稿を表示
ラベル Perl の投稿を表示しています。 すべての投稿を表示

2016年4月2日土曜日

Perl の LWP でニフティクラウドモバイルバックエンドにプッシュ通知を登録してみた

概要

タイトルの通りです
ニフティクラウドモバイルバックエンド (以下、NCMB) にプッシュ通知を登録する Perl スクリプトを作成してみました

環境

  • CentOS 6.7 64bit
  • Perl 5.10.1
  • Cpanm 1.7039

Cpanm のインストール

  • cd /var/tmp
  • wget https://cpanmin.us -O install_cpanm.pl
  • perl install_cpanm.pl - --sudo App::cpanminus

ライブラリのインストール

cpanm を使って LWP で https をコールするために必要なライブラリをインストールします

  • cpanm Crypt::SSLeay
  • cpanm Mozilla::CA

Crypt::SSLeay をインストールするときに「Building and testing Net-HTTP-6.09 …」のフェーズで結構時間がかかりました

登録用スクリプト

スクリプト全体は以下の通りです
スクリプト冒頭の $ak, $ck は各自が作成したアプリケーションキーとクライアントキーを指定してください

  • vim send_push.pl
#! /usr/bin/perl
use warnings;
use strict;
use autodie;
use LWP::UserAgent;
use DateTime;
use Digest::SHA qw(hmac_sha256_base64);

my $ak = 'Please input your application key';
my $ck = 'Please input your client key';
my $endpoint = 'mb.api.cloud.nifty.com';
my $version = '2013-09-01';
my $path = 'push';
my $method = 'POST';
my $uri = "https://${endpoint}/${version}/${path}";
print $uri, "\n";
my $req = HTTP::Request->new( $method, $uri );
$req->header( 'Content-Type' => 'application/json' );
$req->header( 'X-NCMB-Application-Key' => $ak );
my $timestamp = &getTimestamp;
my $sig = &getSignature($method, $endpoint, "/${version}/${path}", "", $ak, $ck, $timestamp);
$req->header( 'X-NCMB-Signature' => $sig );
$req->header( 'X-NCMB-Timestamp' => $timestamp );
my $json = '{"immediateDeliveryFlag":true,"target":["ios"],"message":"test"}';
$req->content( $json );

my $lwp = LWP::UserAgent->new();
my $res = $lwp->request( $req );
print $res->content, "\n";

sub getTimestamp {
  my $dt = DateTime->now( time_zone=>'local' );
  return $dt->strftime('%Y-%m-%dT%H:%M:%S.456Z');
}

sub getSignature {
  my $method = $_[0];
  my $endpoint = $_[1];
  my $path = $_[2];
  my $queryString = $_[3];
  my $ak = $_[4];
  my $ck = $_[5];
  my $timestamp = $_[6];
  my $sigMethod = 'HmacSHA256';
  my $sigVer = '2';
  my %headers;
  $headers{'SignatureMethod'} = 'HmacSHA256';
  $headers{'SignatureVersion'} = '2';
  $headers{'X-NCMB-Application-Key'} = $ak;
  $headers{'X-NCMB-Timestamp'} = $timestamp;
  my $strh = '';
  foreach my $key (sort keys %headers) {
    $strh = $strh . '&' . $key . '=' . $headers{$key};
  }
  $strh = substr($strh, 1);
  my $strToSign = $method . "\n" . $endpoint . "\n" . $path . "\n" . $strh;
  print $strToSign . "\n";
  my $sig = hmac_sha256_base64($strToSign, $ck);
  while (length($sig) % 4) {
    $sig .= '=';
  }
  print $sig , "\n";
  return $sig;
}

実行は

  • perl send_push.pl

で OK です
プッシュ通知の内容は my $json で指定しているので適宜変更してください
とりあえずライブラリが正常にインストールされて、NCMB 側でプッシュ通知が送信できる準備ができていれば問題なく登録できるはずです

最後に

とりあえずプッシュ通知が登録できる Perl スクリプトを作成してみました
Perl 標準でインストールされている LWP を使っています

POST の部分を GET に変更すればプッシュの一覧を取得できるのは確認しています
他の API も $path 部分を変更すればコールできると思います ( 動作確認は実施していません )
全然 SDK っぽくないので、ちゃんと作るなら Cpan で配布できるようにモジュール化しないとダメだと思います

2013年7月19日金曜日

GrowthForecastをインストール

■環境
CentOS release 6.3 (Final) 64bit

■rpmパッケージインストール
yum -y groupinstall "Development Tools"
yum -y install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel

■cpanmインストール
cd /usr/local/bin
curl -LOk http://xrl.us/cpanm
chmod +x cpanm
cpanm local::lib

■perlbrewインストール
curl -L http://install.perlbrew.pl | bash
cpan App::perlbrew
perlbrew init
perlbrew install perl-5.16.0

■GrowthForecastインストール
perlbrew switch perl-5.16.0
bash-4.1# cpanm -n GrowthForecast
依存関係のあるモジュールをすべてインストールしてくれます
bash-4.1# growthforecat.pl
http://localhost:5125/にアクセスすると表示されます

■サンプルグラフ作成
curl -F number=10 http://localhost:5125/api/sample_game/member/register
グラフの作成ができます、値はとりあえず10を入れておきます
crontab -e
5 * * * * curl -F "number=`echo ${RANDOM}`" "http://localhost:5125/api/sample_graph/member/register"
20分くらい放置してグラフを確かめるとグラフが作成されています

■所感
通常のcpanとperlでインストールすると大変なことになります
cpanがインストールされていた既存のサーバ環境でインストールしてみようとしたのですが、
依存関係ではまり一度アンインストールしようとしたのですが、できず結局あきらめました

レスポンスのJSONにerrorというkeyがありますが、これは0ならばerrorじゃないですよという意味みたいです

非常に簡単で何でもグラフ化できそうです
基本的には数値として値が取れれば何でも可視化できますね、便利すぎ
感覚的にはZabbixのユーザパラメータに似ていると感じましたがAPIで登録できるのと設定ファイル等に定義する必要はないのでユーザパラメータよりかは断然簡単に使えます

グラフ自体もAPIで取得可能で設定もAPIで可能です

■参考サイト

2013年7月18日木曜日

【perl】cpanをインストールする方法

■インストール
yum install perl-CPAN
cpanのインストール
perl -MCPAN -e shell
cpanの起動

cpan> o conf
設定状況を確認
cpan> o conf init
対話的にcpanの設定することができる
ex)モジュールの取得先のpemモジュールのインストール先など
cpan> o conf prerequisites_policy follow
個別に設定を変更することも可能
o conf で確認できる値をそのまま key, value で引数として与えればOK
ex)上記はインストール時のyes入力をすべて省略する設定
cpan> o conf commit
設定をファイルに保存する
必ず最後に実施してください、次回cpan起動時にも設定が引き継がれます

Can't locate CPAN.pm
というエラーが出たらそもそもcpanがインストールされていない状況ですので上記のインストール手順を実施します

2013年6月24日月曜日

【Perl】catalystのインストール方法

■環境
CentOS release 6.3 (Final)
perl v5.10.1

■cpan設定
cpan Module::Build
yesをひたすら入力していきます
wget http://shadow.cat/static/cat-install
perl cat-install
(はじめにどっかに接続しようとするけどできない、たぶんスルーでおk)

■catalystインストール
perl -MCPAN -e shell
cpan[1]> o conf prerequisites_policy follow
cpan[2]> o conf commit
cpan[3]> install Catalyst::Devel
cpan[4]> install Task::Catalyst
cpan[5]> q
cd /var/tmp
catalyst.pl test
plが実行できない場合は以下で再インストールしてみてください
perl -MCPAN -e 'install Catalyst::Devel'
ls -ltr test
合計 36
-rw-r--r-- 1 root root 104 7月 19 18:27 test.psgi
-rw-r--r-- 1 root root 127 7月 19 18:27 test.conf
drwxr-xr-x 2 root root 4096 7月 19 18:27 t
drwxr-xr-x 2 root root 4096 7月 19 18:27 script
drwxr-xr-x 3 root root 4096 7月 19 18:27 root
drwxr-xr-x 3 root root 4096 7月 19 18:27 lib
-rw-r--r-- 1 root root 51 7月 19 18:27 README
-rw-r--r-- 1 root root 902 7月 19 18:27 Makefile.PL
-rw-r--r-- 1 root root 143 7月 19 18:27 Changes
cd test
./script/test_server.pl

⇒デフォルトポートは3000で起動する、ブラウザからhttp://localhost:3000/にアクセスする、FWは開放する

emacs lib/test/Controller/Root.pm
⇒$c->response->body( "Hellow Catalyst" );にしcatalystを再起動するとトップページのメッセージが変更している

2012年11月21日水曜日

perlで対話式のy/nをすべてYesで答える方法

--default

というオプションをつけてperlスクリプトを実行すると全てYesの方になります。
vmware-toolsを入れる時とかはすごい便利かもしれないです。

2012年10月1日月曜日

PerlとCPANとYAML

最近のcpanはyamlを必要としているのでcpanを使う前にyamlのインストールとcpanの初期設定が必要になる場合はあります

Warning (usually harmless): 'YAML' not installed, will not store persistent state

という警告がcpanでinstall実行時に出る場合は以下の設定をやってみましょう

  1. rpm -Uvh http://fr2.rpmfind.net/linux/dag/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
  2. yum -y install libyaml-devel
  3. yum -y install *YAML*
  4. perl -MCPAN -e shell
  5. cpan> upgrade
  6. cpan> install YAML


2012年7月22日日曜日

【Perl】cpanでインストールしたモジュールを確認する方法

どうせなんで確認できるコマンドを作成しました
perlがインストールされていることが条件です

emacs /usr/local/cpanfind/cpanfind.sh
以下を記載
#!/bin/sh

perl -v 2>&1 > /dev/null

if [ $# -ne 1 -o $? -ne 0 ]; then
    exit 1;
fi

find `perl -e 'print "@INC"'` -name $1'.pm' -print
chmod 744 /usr/local/cpanfind/cpanfind.sh
cd /usr/bin
ln -s /usr/local/cpanfind/cpanfind.sh cpanfind

で以下で検索できるようになります
cpanfind MongoDB

お試しあれ