hatenagraphup 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+