hatenagraphup 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,28 @@
1
+ 2009-02-09 TADA Tadashi <t@tdtds.jp>
2
+ * changed command name.
3
+ * release 1.2.2.
4
+
5
+ 2009-02-09 TADA Tadashi <t@tdtds.jp>
6
+ * release 1.2.1, supported gem.
7
+
8
+ 2009-02-09 TADA Tadashi <t@tdtds.jp>
9
+ * supported pit library.
10
+ * release 1.2.0
11
+
12
+ 2009-02-09 TADA Tadashi <t@tdtds.jp>
13
+ * deleted -c option because API has get_data operation.
14
+ * release 1.1.0.
15
+
16
+ 2007-02-21 TADA Tadashi <t@tdtds.jp>
17
+ * release 1.0.0.
18
+
19
+ 2007-02-10 TADA Tadashi <t@tdtds.jp>
20
+ * fix problem 1st update in a day in append mode.
21
+
22
+ 2007-02-09 TADA Tadashi <t@tdtds.jp>
23
+ * support append mode (-a and -c).
24
+
25
+ 2007-02-06 TADA Tadashi <t@tdtds.jp>
26
+ * check-in 1st revision.
27
+ * add usage and error messages.
28
+
data/Manifest.txt ADDED
@@ -0,0 +1,5 @@
1
+ Manifest.txt
2
+ ChangeLog
3
+ README.ja
4
+ bin/hatena-graph-update
5
+ lib/hatenagraphup.rb
data/README.ja ADDED
@@ -0,0 +1,93 @@
1
+ hatena-graph-update: はてなグラフを更新するコマンド
2
+
3
+ ■これはなに?
4
+ はてなグラフ<http://graph.hatena.ne.jp/>というサービスがあります。
5
+ さまざまなデータの、日ごとの移り変わりをグラフにして表現してくれる
6
+ サービスです。
7
+
8
+ 通常はWeb上のインタフェースからデータを入力するのですが、APIが公開
9
+ されているので、プログラムから自動的にグラフを更新することができま
10
+ す。
11
+
12
+ hatena-graph-updateは、コマンドラインから数値を指定して特定のグラフ
13
+ を更新するためのコマンドです。コマンドパラメタや標準入力からデータ
14
+ を入力できるので、cronやメールとの連携が簡単にできます。
15
+
16
+ ■使い方
17
+ 実行には、Ruby 1.8.7以降が必要です。
18
+ http://www.ruby-lang.org/
19
+
20
+ はてなグラフAPIライブラリも必須です。
21
+ http://rubyforge.org/projects/hatenaapigraph/
22
+
23
+ また、はてなのユーザID/パスワードをコマンドパラメタで渡したくない
24
+ 場合にはpitもしくはnet/netrcライブラリが利用できるようにインストー
25
+ ルされている必要があります。
26
+ http://rubyforge.org/projects/lowreal/ (pit)
27
+ http://rubyforge.org/projects/net-netrc/ (net-netirc)
28
+
29
+ コマンドシンタックスは以下のとおりです:
30
+
31
+ % hatena-graph-update [-u user] [-p pass] [-d date] [-a] graph [data...]
32
+
33
+ -u user, --user : はてなのユーザID。無指定時には~/.netrcを見ます
34
+ -p pass, --passwd : はてなのパスワード
35
+ -d date, --date : グラフの日付。無指定時には実行時の日付
36
+ -a : 追加モード
37
+ graph : 更新するグラフの名前(必須)
38
+ data : 更新するデータ。無指定時には標準入力
39
+
40
+ ユーザIDをコマンドパラメタで指定しなかった場合には、~/.netrcの中
41
+ から、machineに「hatena.ne.jp」を指定したエントリを参照して使い
42
+ ます。loginとpasswordの値が必要です。
43
+
44
+ dataは、複数指定できます。値は小数に変換された後、すべて足しあわされて
45
+ から、今日、ないしは指定した日付のグラフの値として登録されます。
46
+
47
+ ■実行例
48
+ (1) メールで体重を更新
49
+ メールの本文に体重を書いて特定のアドレスに送ると、その値がグラフに
50
+ 反映されます。procmailを使うとこんな感じに書けます。
51
+
52
+ :0
53
+ * ^TO_.*weight@example.com
54
+ | sed '1,/^$/d' | hatena-graph-update weight
55
+
56
+ (2) ログファイルのサイズをグラフ化
57
+ cronなどでログファイルの切り替えをする際に、前日のログファイルの行数
58
+ をグラフに送ります。
59
+
60
+ #!/bin/sh
61
+ yesterday=`date -d yesterday +%Y-%m-%d`
62
+
63
+ cd /var/log/hoge
64
+ mv hoge.log hoge.log.$yesterday
65
+ wc -l < hoge.log.$yesterday |\
66
+ hatena-graph-update -u hoge -p hoge -d $yesterday logsize
67
+
68
+ (3) 摂取カロリーを食事のたびに追記する
69
+ 朝昼晩の3回の食事のつど、追加モードで摂取カロリーを記録します。数値の
70
+ 後ろに数値以外の文字が書かれていても無視されるので、何を食べたのか同時
71
+ に記録しておくことができます。
72
+
73
+ 朝:
74
+ % hatena-graph-update -a calorie
75
+ 410 チーズトースト
76
+ 100 ミルクティ
77
+ ^D
78
+
79
+ 昼:
80
+ % hatena-graph-update -a calorie
81
+ 720 カレーライス
82
+ ^D
83
+
84
+ 晩:
85
+ % hatena-graph-update -acalorie
86
+ 430 さばの味噌煮
87
+ 200 ごはん
88
+ 150 味噌汁
89
+ ^D
90
+
91
+ ■ライセンス
92
+ Copyright (C) 2009 by TADA Tadashi <t@tdtds.jp>
93
+ Distributed under GPL.
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #
4
+ # hatena-graph-update
5
+ #
6
+ # Copyright (C) 2009 by TADA Tadashi <t@tdtds.jp>
7
+ # Distributed under GPL.
8
+ #
9
+
10
+ begin
11
+ require 'rubygems'
12
+ rescue LoadError
13
+ end
14
+ require 'hatenagraphup'
15
+ require 'optparse'
16
+ require 'ostruct'
17
+ require 'time'
18
+ require 'pathname'
19
+ require 'yaml'
20
+ require 'hatena/api/graph'
21
+
22
+ def error_exit( msg, code = -1 )
23
+ $stderr.puts( "#{File::basename $0}: #{msg}" )
24
+ exit( code )
25
+ end
26
+
27
+ begin
28
+ require 'hatena/api/graph'
29
+ rescue LoadError
30
+ error_exit 'Hatena::Api::Graph not found. See <http://rubyforge.org/projects/hatenaapigraph/>'
31
+ end
32
+
33
+ Opt = OpenStruct::new
34
+ Opt.user = nil
35
+ Opt.pass = nil
36
+ Opt.date = Date::today
37
+ Opt.append = false
38
+ Opt.graph = nil
39
+ Opt.data = 0.0
40
+
41
+ ARGV.options do |opt|
42
+ opt.on( '-u HATENA_ID', '--user' ) {|v| Opt.user = v }
43
+ opt.on( '-p PASSWD', '--passwd' ) {|v| Opt.pass = v }
44
+ opt.on( '-d DATE', '--date' ) {|v| Opt.date = Date::parse( v ) }
45
+ opt.on( '-a', '--append' ) {|v| Opt.append = true }
46
+ opt.on( '-h', '--help' ) do |v|
47
+ puts <<-USAGE.gsub( /^\t\t/, '' )
48
+ hatena-graph-update: sending data to hatena graph service.
49
+ version #{HatenaGraphUp::VERSION}
50
+ usage:
51
+ #{File.basename( $0 )} [-u id] [-p pass] [-d date] [-a] graph [data...]
52
+
53
+ -u id, --user : user ID of hatena service.
54
+ -p password, --passwd : password of hatena service.
55
+ -d date, --date : date of data. (default TODAY)
56
+ -a : append to data of same day.
57
+ graph : name of graph on hatena.
58
+ data : data in numeric. (default from STDIN)
59
+
60
+ If no --user option specified, this command will try to get it from
61
+ ~/.pit or ~/.netrc machine as 'hatena.ne.jp'.
62
+
63
+ Copyright (C) 2009 by TADA Tadashi <t@tdtds.jp>
64
+ Distributed under GPL.
65
+
66
+ USAGE
67
+ exit
68
+ end
69
+ opt.parse!
70
+ end
71
+
72
+ #
73
+ # check user id and password
74
+ #
75
+ unless Opt.user then
76
+ auth_entry = 'hatena.ne.jp'
77
+ begin
78
+ require 'pit'
79
+ conf = Pit::get( auth_entry, :require => {
80
+ 'username' => 'Your Hatena ID',
81
+ 'password' => 'Your Hatena Password'
82
+ } )
83
+ Opt.user = conf['username']
84
+ Opt.pass = conf['password']
85
+ rescue LoadError
86
+ begin
87
+ require 'net/netrc'
88
+ if netrc = Net::Netrc.locate( auth_entry ) then
89
+ Opt.user = netrc.login
90
+ Opt.pass = netrc.password
91
+ else
92
+ error_exit( 'no hatena.ne.jp entry in .netrc.' )
93
+ end
94
+ rescue LoadError
95
+ end
96
+ end
97
+ end
98
+ error_exit( 'no user id specified.' ) if not Opt.user or Opt.user.length == 0
99
+ error_exit( 'no password specified.' ) if not Opt.pass or Opt.pass.length == 0
100
+
101
+ #
102
+ # check graph parameter
103
+ #
104
+ Opt.graph = ARGV.shift
105
+ error_exit( 'no graph name specified.' ) unless Opt.graph
106
+
107
+ #
108
+ # check data
109
+ #
110
+ if ARGV.length == 0 then # get from stdin
111
+ while l = gets
112
+ Opt.data += l.to_f
113
+ end
114
+ else
115
+ ARGV.each {|arg| Opt.data += arg.to_f }
116
+ end
117
+
118
+ begin
119
+ g = Hatena::API::Graph::new( Opt.user, Opt.pass )
120
+
121
+ if Opt.append then
122
+ require 'yaml'
123
+ datas = YAML::load( YAML::dump( g.get_data( Opt.graph ) ) )
124
+ Opt.data += datas[Opt.date] || 0.0
125
+ end
126
+
127
+ g.post( Opt.graph, Opt.date, Opt.data )
128
+ rescue Hatena::API::GraphError
129
+ error_exit( $!.message )
130
+ end
@@ -0,0 +1,3 @@
1
+ module HatenaGraphUp
2
+ VERSION = '1.2.2'
3
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hatenagraphup
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.2
5
+ platform: ruby
6
+ authors:
7
+ - TADA Tadashi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-02-09 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.8.3
24
+ version:
25
+ description: updating data to Hatena Graph.
26
+ email:
27
+ - t@tdtds.jp
28
+ executables:
29
+ - hatena-graph-update
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - Manifest.txt
34
+ files:
35
+ - Manifest.txt
36
+ - ChangeLog
37
+ - README.ja
38
+ - bin/hatena-graph-update
39
+ - lib/hatenagraphup.rb
40
+ has_rdoc: true
41
+ homepage: Hatena Graph Update <http://rubyforge.org/projects/hatenagraphup/>
42
+ post_install_message:
43
+ rdoc_options:
44
+ - --main
45
+ - README.txt
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ requirements: []
61
+
62
+ rubyforge_project: hatenagraphup
63
+ rubygems_version: 1.2.0
64
+ signing_key:
65
+ specification_version: 2
66
+ summary: updating data to Hatena Graph.
67
+ test_files: []
68
+