2016-05-07

LINE BOT APIを利用してGoogle Calendarの情報を通知する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
※サンプルをLINE BOT APIからLINE Messaging APIに書き換えたものを以下で公開しました。
https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html

LINEに電車遅延情報を送ってみるに続き、Google Calendarの情報を送ってみます。

Google Calendarの情報を取得するには、
rubyでGoogle Calendarをいじる
を参考にしていただけたらと思います。
google-api-clientを利用するのですが、今回は古いバージョンの0.6.4を利用します。
最新バージョンでは結構使い方が変わっているようです。

そして情報を取得したいユーザのoauth情報を取得した「.google-api.yaml」を作成しておいて以下のプログラムと同じ場所に置いておきます。
以下は明日の予定をチェックして予定があればLINEに通知するものになります。



ローカル環境で利用することを前提にしています。 送信先IDはcallbackを設定してなんとか事前に取得しておく必要があります。

これを以下のような感じでcron設定して毎日23:10に動作するようにしました。
10 23 * * * /usr/bin/ruby /home/hogehoge/ruby/line_bot/gcal_chk.rb >> /home/hogehoge/ruby/line_bot/gcal_chk.log


Google Nowを使っていれば不要な気がするけれど、いずれLINE BOT APIでグループチャットにもメッセージが送れるようになると信じて、その時はグループチャットにグループの予定を送るものとして使いたいなぁと思ってみたりしています。

2016-04-30

LINE BOT APIを利用して電車遅延情報の送信を改良した

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
※サンプルをLINE BOT APIからLINE Messaging APIに書き換えたものを以下で公開しました。
https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html

以前
LINE BOT APIを利用して電車遅延情報を送信する
というのを書いたのですが、ちょっと改造しました。

以下をできるようにしようと思います。
・祝日は通知しなくてよくしたい
・localで実行しているがIPアドレスが変わる可能性があるので送信できなかったときはメール通知をしたい

祝日に関してはholiday_jpというgemを使って判別することにしました。
https://github.com/komagata/holiday_jp

メール送信はGmailを利用しようと思います。以下が参考になりました。
http://qiita.com/nownabe/items/3a348c86b3c0a2c87ab0
http://grottad.com/blog/228


で、改良版の電車遅延情報を送信するものは以下のとおりです。



これを以下のような感じでcron設定して月曜から金曜までの出勤前の6:50に動作するようにしました。
50 6 * * 1,2,3,4,5 /usr/bin/ruby /home/hogehoge/ruby/line_bot/train_chk2.rb >> /home/hogehoge/ruby/line_bot/train_chk.log

2016-04-29

財布を買い換えてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
今まで以下の「エムピウ m+ 二つ折り財布」を使っていたのですが、だいぶボロになってきてしまいました。



買い換えるにあたり財布の中身を断捨離してコンパクトなものにしたいなぁと思ったわけです。
またキーホルダーもちょっとついでに買い換えたいなぁと思ったわけです。

最初に気になったのは、以下の「薄いマネークリップ abrAsus (アブラサス)」と「小さい小銭入れ abrAsus (アブラサス)」の組み合わせです。



ですが、本当にこのサイズでいけるのかが不安であったりもします。いざ買ってみてちょっと合わなかった場合を考えるとちょっとお高めな感じもします。
なのでもうちょっとお安く同じようなものがないか探して見ました。

「小さい小銭入れ abrAsus (アブラサス)」の代わりになるものは、なかかなか見つからなかったのですが以下を見つけました。





「薄いマネークリップ abrAsus (アブラサス)」の方は、お安めのマネークリップがそこそこありました。
その中で以下を選んで見ました。断捨離実行に弱気になってカードがそこそこ入るのがポイントです。


そしてカードを断捨離しきれなかった保険として以下も買いました。


とりあえず入れ替えてみた結果、以下のような感じになりました。


カードの断捨離を全然していないのでトータルの厚みは増えてしまっています。
そのうち断捨離するとして、とりあえず違う場所にしまえるようになったので、まぁよしとします。

ちょっと使ってみた感想としては、もともと財布を入れていた場所がマネークリップだけになっているので軽い感じにはなっています。
あとキーホルダーと小銭要れが一緒になったので軽い買い物は、これだけでいけるのも便利です。

今まで一つの財布に入っていたものが分かれてしまっている、ちょっとまだどこに何を入れたかがあやふやだったり、場合によっては二つ出さないといけないので戸惑いはありますが、きっとなれていくことでしょう。





2016-04-27

LINE BOT APIを利用して電車遅延情報を送信する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
LINE BOT APIを利用してメッセージを送信するには、以下のような感じでできます。



ローカル環境で利用することを前提にしています。
送信先IDはcallbackを設定してなんとか事前に取得しておく必要があります。

これでメッセージは送信できたのですが、せっかくなので役に立つ機能を作りたいものです。
なので電車が遅延していたら通知するbotを作ってみます。
適当な時間に自動実行できるようにさせたら便利な気がします。

電車遅延情報の取得は
鉄道遅延情報のjson(https://rti-giken.jp/fhc/api/train_tetsudo/)
を使わせていただきます。

以下のような感じです。



遅延を確認したい電車情報の部分は、
鉄道遅延情報のjson(https://rti-giken.jp/fhc/api/train_tetsudo/)
を見ながら適当に変更します。

なんとなく便利そうな気がします。


LINE BOT APIを使ってみた感想としては、まだトライアルで機能が少ないので機能追加を期待したいところです。
個人的には以下のような改善されるとうれしいなぁと思うしだいです。
・グループチャットにbotから送信ができるようになってほしい
・callbackがなくてもフレンドリストなどを取得できるようになってほしい
・IPのホワイトリストは、めんどくさいのでなくしてもらいたいなぁ

LINE BOT APIのcallbackにAWS Lambdaを使ってみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
※サンプルをLINE BOT APIからLINE Messaging APIに書き換えたものを以下で公開しました。
https://kingyo-bachi.blogspot.jp/2017/04/line-bot-apiline-messaging-api.html

LINE BOT APIを試すにはcallbackを設定しないと試せることがほとんどないことがわかったのでcallbackを設定できるようにします。

VPSとかすでに持っているのならば簡単なのでしょうが、残念ながら私はお手軽に使えるものを持っていません。

他の方の例などを見るとAWS LambdaにAPI Gatewayを組み合わせるとお手軽な気配だったのでやってみました。

ちなみにLambdaとかで何ができるかと、ちっともわかってなかったのですが、以下が参考になりました。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/getting-started.html

試してみた結論としては、お手軽に動作を見るにはLambdaはよい感じなのですが、ずっとcallbackとして利用するにはIPアドレスが変わってしまうので使い続けることは現実的ではなさそうでした。

ずっと使うには向いてないかもしれないですが、お手軽に試すにはよかったのでLambdaでLINE BOT APIを使う方法を紹介します。


Lambdaの画面でCreate a Lambda Functionをクリック



ここはSKIPを選択します。



適当にName欄に名前をつけて、RuntaimeにNode.js 0.10を選択します。



コードを記載します。


記載するコードは以下のような感じです。



RoleをそれっぽいものにしてNextをクリック



Create functionをクリック



これでLambdaファンクションはできあがります。なんとなくTestをクリックします



Save and testをクリック



下の方にtestの結果が表示されます。エラーはでますが、Log outputにとりあえず受け取ったイベントが表示されているのでよしとします。



作成したLambdaファンクションにAPI Gatewayを設定します。
API endpointsタブを選択してAdd API endpointをクリック



API nameを適当につけて
MethodをPOST
SecurityをOpen
にしてSubmitをクリック



API Gatewayが設定されました
API endpoint URLをコピーします。



LINEのcallback設定ページにいって上記のURLをペーストします。その際に443を追加します。


しばらくしてから(10分後ぐらいには使えました)、LINEでbotにメッセージを送ります。
ですが、botのIPをホワイトリストに登録してないので何も返答がありません。
またlambdaの方に戻ります。
Monitoringタブを選択して、View logs in CloudWatchをクリック



logの中にLINEにはじかれたIPアドレスが表示されているので確認します。



そのIPアドレスをLINEの方のホワイトリストに登録します


これで再度LINEからbotにメッセージを送ると同じメッセージをbotが返してくれるようになります。
そしてlogの方でもうまくいったことが確認できます。
そしてlogに自分のLINEアカウントのIDを記録するようにしたので、それも確認できます。




以下のページが参考になりました。
http://dev.classmethod.jp/cloud/build-line-bot-api-using-lambda/
http://qiita.com/teyosh/items/567ee416c94c2af2fe91
http://shunirr.hatenablog.jp/entry/2016/04/13/164902

2016-04-26

LINE BOT APIをまずはできるところまで試す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
LINE BOT APIが利用できるようになり、いろんな方が試しているようなので試してみることにしました。

利用を開始する手順は以下が参考になりました。
https://www.panzee.biz/archives/9115
(今は上限に達して登録はできないようです)

APIを利用するためにはメッセージを受け取るcallbackの設定が必要なのですが、インターネットで受け取れるようなサーバを持っていないので、callbackの設定なしで自分のローカル環境だけでできるところまでやってみることにします。

私がやりたいなぁと思っていることは、なんらかの情報をグループチャットに通知するだけで、BOTでよくある対話的なことは、まぁ後でもよいかなぁと思っているのでcallbackなしでいろいろできると便利です。

ただ結論から言うとcallbackを用意しないと自分のプロファイルを取得することしかできなかったです。なのでとりあえず利用できるということが確認できることぐらいしか今はできないようです。

以下のような感じで試せます。

まずはAPIをたたくもとのIPアドレスをホワイトリストに登録が必要なので以下などでIPアドレスを調べてホワイトリストに登録します。
https://www.cman.jp/network/support/go_access.cgi

ここまで準備できて、linuxを利用できるならばcurlで以下のようにすれば、とりあえず確認ができます。

curl -H "X-Line-ChannelID: 自分のChannel_ID" -H "X-Line-ChannelSecret: 自分のChannel _Secret" -H "X-Line-Trusted-User-With-ACL: 自分のMID" -XGET https://trialbot-api.line.me/v1/profiles?mids=自分のMID

rubyでたたくならば以下のような感じです。


以下が参考になりました。
http://ola.kironono.com/entry/2016/04/09/205251

できるのがこれだけだと寂しいのでcallbackできるものを準備できるようにしようと思います。


2016-03-20

Nexus 5Xに機種変をしたよ。ドコモ回線だよ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
先日、スマホを機種偏してNexus 5Xにしました。


Nexus 5Xを手に入れるには、SIMフリーのものを手に入れる方法もありますが、ドコモ回線を使っていて、まだ使い続けようかなぁと思っていたのでドコモで手に入れました。
今なら、なんか割引が効くのでかなりお安く手に入ります。ドコモポイントやらなんやかんやで結局0円で手に入れました。 ドコモ回線でNexus 5Xを使いたいならば、今はチャンスなのかもしれないです。

以下ではドコモ回線でNexus 5Xを使うために行ったことを記録として書いておきます。

いろいろと旧端末からファイルを移したりする作業があるのでファイルを移すための
ESファイルエクスプローラーなどのファイルマネージャー系のアプリや
Dropboxなどのファイル共有系のアプリは最初に準備しておくと便利です。

・電話帳
まずドコモの電話帳で管理されていたものは、これを機会にgoogleアカウントに移行しました。
以下が参考になります。
http://scratchpad.jp/docomo-account-to-google-account/

・ドコモメール
ドコモメールのアプリはNexus 5Xでは動きません。でもIMAPが使えるものならばOKなようです。
以下が参考になります。
https://www.nttdocomo.co.jp/service/docomo_cloud/docomo_mail/other/
ただ使うためには、最初にマルチデバイスで使えるように設定をしておく必要があります。
私は機種変の前にこれをやらなかったので、どうやって設定変更すればよいのか、わからずに苦労しました。
結局は、
http://smt.docomo.ne.jp
にLTE経由で接続すればOKでしたが、wifiからだと設定できないことに気づかなかったので時間がかかってしまいました。

そしてIMAP用のアプリの選定も苦労しました。
最初K-9 Mailを利用しようと思ったのですが、受信はできるのですが送信ができませんでした。設定には問題はないはずなのに・・・という感じです。
myMailでならば、送受信はできました。ただあまり好みではなかったので結局使ってません。
最終的にはGMailアプリでドコモメールを受信するようにしました。基本的には送受信問題ないのですが、一部の相手にメールの日本語部分がうまく送れていないような状況です。
以下はGMailでの設定方法です。
http://zibunlog.com/sp/gmail-docomomail/
一部おかしな部分があるので、徐々にドコモメールの利用はやめてGMailのアドレスの方に移行していこうかなぁと思っています。

・docomo wifi
ドコモ回線使っていてdocomo wifiも使えるようになっていたのですが引き続き利用できました。
設定も簡単で以下が参考になります。
https://www.nttdocomo.co.jp/service/data/docomo_wifi/usage/android/index.html

・ウイルス対策
ドコモのスマホを使っているとウイルスソフトも一部の機能は無料で使えたのですが、Nexus 5Xでは同じものは利用できませんでした。
なのでAVASTのウィルスソフトを入れました。

・着信音
Nexus 5Xにはデフォルトではあんまり着信音が入ってなかったので旧端末で独自に使っていたものを移行して使いました。
ESファイルエクスプローラーがあれば、着信音用のMP3ファイルを用意さえしてあれば設定は簡単でした。
以下が参考になります。
http://blog.trippyboy.com/2014/android/nexus5%E9%9F%B3%E6%A5%BD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E7%9D%80%E4%BF%A1%E9%9F%B3%E3%81%AB%E7%B0%A1%E5%8D%98%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%EF%BC%81/

・LINE
ドコモサービスとは関係ないですがLINEの移行も以下を参考に行いました。
http://k-tai.sharp.co.jp/support/changeguide/guide3_2/p08.html

・その他設定
その他のNexus 5Xの設定で以下を参考にしました。
http://ap-land.com/archives/12298

・ストラップ
Nexus 5Xにはストラップをつける穴がありません。
ストラップを使いたいので手段を調べたところ、ストラップの穴がついているケースを使うか、イヤホンジャックの部分を利用するの2択のようでした。
イヤホンジャックは、普通にイヤホンを使いたいので以下のケースを買って利用することにしました。

ちなみにイヤホンジャックを利用する場合は以下がよさそうです。

2016-02-04

2015-11-26

openldapをActiveDirectoryのプロキシーとして設定する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
openldapをActiveDirectoryのプロキシーになるように設定して、openldap経由でActiveDirectoryの内容を確認する方法です。

ちなみにCentos6にopenldapをインストールする前提です。


まずは、openldapをインストールします。
yum install openldap openldap-servers openldap-clients

そしてActiveDirectory用スキーマダウンロードします。
wget http://lism.sourceforge.jp/docs/ad.schema -O /etc/openldap/schema/ad.schema


openldapはsyslogのlocal4にログを出力するようになっているらしいので、出力できるようにします。
vi /etc/rsyslog.conf
以下の内容を追記します。
------------------------------------------------------
# openldap slapd log
local4.*                                                /var/log/ldap.
log
------------------------------------------------------

変更を反映させるためにsyslogを再起動します。
service rsyslog restart

ActiveDirectoryのプロキシーになるように設定をします。
vi /etc/openldap/slapd.conf
以下のように記載します。
以下peername.ipの部分は接続を許可するサーバのIPアドレスを記載しますが、接続制限をしないならばAccess Controllの部分はなしでOKです。
------------------------------------------------------
### Schema includes ###########################################################
include                 /etc/openldap/schema/core.schema
include                 /etc/openldap/schema/cosine.schema
include                 /etc/openldap/schema/inetorgperson.schema
include                 /etc/openldap/schema/misc.schema
include                 /etc/openldap/schema/nis.schema
include                 /etc/openldap/schema/ad.schema

# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2

# Main settings ###############################################################
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

### Logging ###################################################################
loglevel                256

### Access Controll  ##########################################################
access to *
  by peername.ip=127.0.0.1 read
  by peername.ip=192.168.0.10 read
  by * none

### Database definitions  #####################################################
database        ldap
readonly        yes
suffix          "ActiveDirectoryのBaseDNを記載します"
uri             ldap://ActiveDirectoryサーバのホスト名かIPアドレス/
rebind-as-user
idassert-bind   bindmethod=simple
                binddn="ActiveDirectoryにBINDするユーザ"
                credentials=上記ユーザのパスワード
                mode=none
idassert-authzFrom      "*"
------------------------------------------------------

設定を反映させます。
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d

openldapを起動させます。
service slapd start

以下のような感じで接続できたらOKです。
ldapsearch -H ldap://localhost -x -b "上記で設定したActiveDirectoryのBaseDN" -LLL "sAMAccountName=jojo"


ちなみにldapsearchでActiveDirectory直接問い合わせるならば以下のような感じになります。 ldapsearch -D "ActiveDirectoryにBINDするユーザ" -w ユーザのパスワード -h ActiveDirectoryサーバのホスト名かIPアドレス -b "ActiveDirectoryのBaseDNを記載します" -x "sAMAccountName=jojo"


もう一つおまけで、この設定を行ったopenldapにrubyからActiveDirectory上のユーザパスワードの確認を行うとすると以下のような感じです。

require 'net/ldap'
ldap = Net::LDAP.new
ldap.host = "openldapが起動するホスト名またはIPアドレス"
username,password = "jojo", "jojopwd"
result = ldap.bind_as(:base => Settings.ad_base,:filter => "(cn=#{username})",:password => password )

パスワードがあっていればldapのオブジェクトが戻り、あってなければfalseが戻ります。


2015-11-25

redmineの認証にActiveDirectoryを利用する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
redmineの認証をActiveDirectoryにオマカセする方法です。

[管理]-[LDAP認証]の画面で「新しい認証方式」をクリックします。

そして最低限、以下のように設定します。

名称:AD(お好きな名称を設定します) 
ホスト:XXX.XXX.XXX.XXX(ActiveDirectoryのドメインサーバ名かIPアドレス) 
ポート:389 
アカウント:domain\$login(domainは利用するActiveDirectoryのドメイン名です。普段利用しているドメインアカウントがdomain\mynameみたいなものだったら、mynameの部分を$loginに置き換えて登録します。) 
パスワード:(空白) 
検索範囲:DC=domain,DC=sample,DC=co,DC=jp(ユーザを検索するBaseDNを設定します) 
ログイン名属性:sAMAccountName

これで作成して、テストを実施して
接続しました。
と出ればOKです。

そしてredmineにすでに作成済みのユーザがいて、認証をActiveDirectoryに切り替えたい場合は、
[管理]-[ユーザ]の画面で「設定変更したいユーザ」をクリックします。

そして 
認証方式:AD(上記で作成したもの) 
に変更して保存すればOKです。

これでActiveDirectoryに設定してあるパスワードでredmineにログインできるようになります。


ちなみに以下のサイトであるようなredmineとsubversionを連携させてredmineのユーザ情報でsubverionを認証させている場合、設定はそのままでLDAPの情報をきちんとひっぱて来てくれてsubversion側もActiveDirectoryのパスワードで認証できるようになりました。
http://blog.ogatomo.com/blog/2012/05/17/redmine-pm-setting-memo/