hatenagraphup 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +28 -0
- data/Manifest.txt +5 -0
- data/README.ja +93 -0
- data/bin/hatena-graph-update +130 -0
- data/lib/hatenagraphup.rb +3 -0
- metadata +68 -0
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
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
|
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
|
+
|