Class: HatenaDiary::Client
- Inherits:
-
Object
- Object
- HatenaDiary::Client
- Defined in:
- lib/hatenadiary.rb
Class Method Summary collapse
-
.login(username, password, proxy = nil, &block) ⇒ Object
Allocates Client object.
- .mechanizer ⇒ Object
- .mechanizer=(klass) ⇒ Object
Instance Method Summary collapse
-
#delete(yyyy, mm, dd, options = {}) ⇒ Object
Deletes an entry from Hatena diary service.
-
#initialize(username, password, agent = self.class.mechanizer.new) ⇒ Client
constructor
Allocates Client object.
-
#login(username = nil, password = nil) ⇒ Object
Does login.
-
#login? ⇒ Boolean
Returns a client itself was logined or not.
-
#logout ⇒ Object
Does logout if already logined.
-
#post(yyyy, mm, dd, title, body, options = {}) ⇒ Object
Posts an entry to Hatena diary service.
-
#set_proxy(url, port) ⇒ Object
Configure proxy.
-
#transaction(username = nil, password = nil) ⇒ Object
Login and execute a received block, and then logout ensurely.
Constructor Details
#initialize(username, password, agent = self.class.mechanizer.new) ⇒ Client
Allocates Client object.
- username
-
Hatena ID
- password
-
Password for username
84 85 86 87 88 89 |
# File 'lib/hatenadiary.rb', line 84 def initialize(username, password, agent = self.class.mechanizer.new) @agent = agent @username = username @password = password @current_account = nil end |
Class Method Details
.login(username, password, proxy = nil, &block) ⇒ Object
Allocates Client object.
If block given, login and execute a received block, and then logout ensurely.
- username
-
Hatena ID
- password
-
Password for username
- proxy
-
Proxy configuration; [proxy_url, port_no] | nil
73 74 75 76 77 78 |
# File 'lib/hatenadiary.rb', line 73 def self.login(username, password, proxy = nil, &block) client = new(username, password) client.set_proxy(*proxy) if proxy return client unless block_given? client.transaction(&block) end |
.mechanizer ⇒ Object
57 58 59 |
# File 'lib/hatenadiary.rb', line 57 def self.mechanizer @mechanizer ||= Mechanize end |
.mechanizer=(klass) ⇒ Object
61 62 63 |
# File 'lib/hatenadiary.rb', line 61 def self.mechanizer=(klass) @mechanizer = klass end |
Instance Method Details
#delete(yyyy, mm, dd, options = {}) ⇒ Object
Deletes an entry from Hatena diary service.
Raises HatenaDiary::LoginError unless logined.
options
- :group
-
assign hatena-group name. edit group diary.
Invalid options were ignored.
172 173 174 |
# File 'lib/hatenadiary.rb', line 172 def delete(yyyy, mm, dd, = {}) get_form(yyyy, mm, dd, [:group]){|r| r.forms.last }.submit end |
#login(username = nil, password = nil) ⇒ Object
Does login.
If username or password are invalid, raises HatenaDiary::LoginError .
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/hatenadiary.rb', line 117 def login(username = nil, password = nil) username ||= @username password ||= @password form = @agent.get("https://www.hatena.ne.jp/login").forms.first form["name"] = username form["password"] = password form["persistent"] = "true" response = form.submit @current_account = [username, password] case response.title when "Hatena" then response when "Login - Hatena" then raise LoginError.new("login failure").set_account(username, password) else raise Exception, '[BUG] must not happen (maybe cannot follow hatena spec)' end end |
#login? ⇒ Boolean
Returns a client itself was logined or not.
-> true | false
110 111 112 |
# File 'lib/hatenadiary.rb', line 110 def login? @current_account ? true : false end |
#logout ⇒ Object
Does logout if already logined.
134 135 136 137 138 139 140 |
# File 'lib/hatenadiary.rb', line 134 def logout return unless login? @agent.get("https://www.hatena.ne.jp/logout") account = @current_account @current_account = nil account end |
#post(yyyy, mm, dd, title, body, options = {}) ⇒ Object
Posts an entry to Hatena diary service.
Raises HatenaDiary::LoginError unless logined.
options
- :trivial
-
check a checkbox of trivial updating.
- :group
-
assign hatena-group name. edit group diary.
Invalid options were ignored.
151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/hatenadiary.rb', line 151 def post(yyyy, mm, dd, title, body, = {}) title = Util.encode_to_utf8(title) body = Util.encode_to_utf8(body) form = get_form(yyyy, mm, dd, [:group]){|r| r.form_with(:name => 'edit') } form["year"] = "%04d" % yyyy form["month"] = "%02d" % mm form["day"] = "%02d" % dd form["title"] = title form["body"] = body form["trivial"] = "true" if [:trivial] @agent.submit form, form.(:name => 'edit') end |
#set_proxy(url, port) ⇒ Object
Configure proxy.
92 93 94 |
# File 'lib/hatenadiary.rb', line 92 def set_proxy(url, port) @agent.set_proxy(url, port) end |
#transaction(username = nil, password = nil) ⇒ Object
Login and execute a received block, and then logout ensurely.
97 98 99 100 101 102 103 104 105 |
# File 'lib/hatenadiary.rb', line 97 def transaction(username = nil, password = nil) raise LocalJumpError, "no block given" unless block_given? login(username, password) begin yield(self) ensure logout end end |