[perl]Google::API::Clientを使ってみた

Written by uechoco 2月 05
[perl]Google::API::Clientを使ってみた はコメントを受け付けていません。
この記事を読む時間:1031くらい

perl歴はそろそろ1週間はすぎてるくらいのうえちょこです。初めてのPerlと続・初めてのPerlは読みましたが、リファレンスとオブジェクトの当たりから全然理解できてないです。なれるまでには暫く時間がかかりそうです。

さて、そうはいっても書かなきゃ慣れないので、前職でも使っていた日報クリエイターというWebアプリのPerl版をつくろうかなーと思っています。機能としては、Google Calendarから指定のカレンダーの指定の期間のイベントを取得し、整形して出力するだけのものです。前のはCakePHPで作ったんですがソースコードは会社に寄付しちゃってるんで、また1から作り直します。

最近のGoogle Data APIはバージョンが新しくなったらしく、GoogleからClient Libraryという形でライブラリが提供されています。PHP、Ruby、Python、Java、.NET、JavaScript、Objective-Cなどがあります。Perlのはありませんww が、perl版のClient Libraryを作っている方がいました。

Google APIs Client Library for Perl
モジュール構造で言うとGoogle::API::Clientです。

インストールログを貼っておきます。

そういえば、以下のインストール手順だと、本家のgithubから取ってきているんだけれど、今のバージョンだと、calendar APIに対するOAuth用URLが間違って出力されてしまうので、実際はforkしてoauth2_scope_delimiterというブランチ切ったものを使用しました。pull request投げたら、ローカルでは直してあるけどまだpushしてないバグだったって返答が来たので、そのうち本家も更新されると思います。

[shcode]
## 環境はperlbrewでインストールしたperl 5.14.2とcpanm

######################
# ライブラリのDL
######################
$ mkdir _libs
$ cd _libs
$ git clone https://github.com/comewalk/google-api-perl-client
$ cd google-api-perl-client

######################
# 1回目のMakefile.PL … 失敗
######################
$ perl Makefile.PL

### Can’t locate inc/Module/Install.pm in @INC (@INC contains: …… ) at Makefile.PL line 1.
### BEGIN failed–compilation aborted at Makefile.PL line 1.

### (おそらく Module::Install がないのか?インストールしてみる)
$ cpanm Module::Install

######################
# 2回目のMakefile.PL … 失敗
######################
$ perl Makefile.PL

### Unknown function is found at Makefile.PL line 3.
### Execution of Makefile.PL aborted due to runtime errors.

### (readme_fromがないようなので、 Module::Install::ReadmeFromPod をインストールしてみる)
$ cpamn Module::Install::ReadmeFromPod

######################
# 3回目のMakefile.PL … 失敗
######################
$ perl Makefile.PL

### Writing README from lib/Google/API/Client.pm
### Unknown function is found at Makefile.PL line 6.
### Execution of Makefile.PL aborted due to runtime errors.

### (auto_set_repositoryがないようなので、 Module::Install::Repository をインストールしてみる)

######################
# 4回目のMakefile.PL … 成功
######################
$ perl Makefile.PL

######################
# 1回目のmake … 成功
######################
$ make

######################
# 1回目のmake test … 失敗
######################
$ make test

### (いろんなモノが足りない。エラーメッセージで分かるものからインストール)
$ cpanm LWP::Protocol::https Test::Pod Test::Pod::Coverage

######################
# 2回目のmake test … 失敗
######################
$ make test

### (おそらくテストは通らないんじゃない?とりあえず先進む)

######################
# 1回目のmake install … 成功
######################
$ make install

### (サンプルプログラムでインストール確認)
perl eg/urlshortener/cli_public_access.pl

### $VAR1 = {
### ‘kind’ => ‘urlshortener#url’,
### ‘longUrl’ => ‘http://code.google.com/apis/urlshortener/’,
### ‘id’ => ‘http://goo.gl/BwA5N’
### };
###
### $VAR1 = {
### ‘kind’ => ‘urlshortener#url’,
### ‘status’ => ‘OK’,
### ‘longUrl’ => ‘http://code.google.com/apis/urlshortener/’,
### ‘id’ => ‘http://goo.gl/BwA5N’
### };
[/shcode]

ちなみに、こんな感じのコードで、calendarList.listが取得出来ました。<CLIENT ID>とかはGoogle APIs Consoleで取得してください。

  1. use strict;
  2. use warnings;
  3. use lib "/path/to/libs/google-api-perl-client/lib";
  4. use feature qw/say/;
  5.  
  6. use Data::Dumper;
  7.  
  8. use Encode;
  9. use Google::API::Client;
  10. use OAuth2::Client;
  11.  
  12. my $client = {
  13. id => '<client id>',
  14. secret => '<client secret>',
  15. redirect_url => '<client redirect url>',
  16. };
  17. my $service = Google::API::Client->new->build('calendar', 'v3');
  18.  
  19. my $auth_driver = OAuth2::Client->new({
  20. auth_uri => Google::API::Client->AUTH_URI,
  21. token_uri => Google::API::Client->TOKEN_URI,
  22. client_id => $client->{id},
  23. client_secret => $client->{secret},
  24. redirect_uri => $client->{redirect_url},
  25. auth_doc => $service->{auth_doc},
  26. });
  27.  
  28. say $auth_driver->authorize_uri;
  29.  
  30. say 'Enter verification code:';
  31. my $code = ;
  32. chomp $code;
  33.  
  34. my $token_obj = $auth_driver->exchange($code);
  35.  
  36. my $res = $service->calendarList->list->execute({ auth_driver => $auth_driver });
  37. #say Dumper($res);
  38.  
  39. my @calendar_list;
  40. for my $item (@{$res->{items}}) {
  41. push @calendar_list, $item;
  42. }
  43. for my $calendar (@calendar_list) {
  44. print "## Calendar Info: \n";
  45. print "$_ : $calendar->{$_}\n" for keys $calendar;
  46. print "\n";
  47. }

継続の力:ランニングタイムが良くなってます!

Written by uechoco 2月 02
継続の力:ランニングタイムが良くなってます! はコメントを受け付けていません。
この記事を読む時間:132くらい

板橋Cityマラソンに向けて、黙々とランニングを続けています。

今回は3年ぶりのフルマラソンです。ホノルルの時は4時間55分、東京マラソンの時は風邪引いてたので5時間39分でした。今回はsub4、すなわち4時間以内の走破を目指しています。sub4というのは、市民ランナーにとっては結構大きな目標で、あこがれのタイムなんです。中高大と学芸部に勤しんだ私にとってはsub4なんて夢のまた夢だと思ってました。でも、挑戦しようと思います。

昔は週1でランニングして今いたが、sub4はそうは甘くないと思って、Nike Run Trainingのサイトを参考に、フルマラソン上級コースのトレーニングプランを実行中です。筋トレ・ストレッチもほぼ毎日やっています。ランニングは週3になりました。

最近、ランニングタイムがよくなってます。3年前はトップスピードが5’30”/kmで平均6’00/kmでランニングしていましたが、最近はトップスピード5’00〜5’15/km、平均5’30”/kmで走っています。まだスタミナが持たなくて徐々にスピードがダウンしてしまうのですが、例えばトップスピードを維持する時間が1週間当たり5分ずつくらい伸びています。着実に進歩しています。

「ああ、これが継続するってことなんだ」って今更実感しています。

自分の成長が数値化して分かるってのもいいですね。

もっともっと成長します!

DeNAに入社しました

Written by uechoco 2月 02
DeNAに入社しました はコメントを受け付けていません。
この記事を読む時間:25くらい

帰ってぼーっとして、ランニングして、お風呂入ったら、日付とっくに変わってました。
新しい勤務先はDeNAです。どうぞよろしくお願いします。

いろいろ書こうかと思ったけど、退職記事でいろいろ書きすぎたんで、こっちはシンプルにしておきます。うだうだ考えるより、前に突き進んだほうがいいしね。転職について何か聞きたければ飲み会とかで。