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 +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
|
+
|