#!ruby -Ku $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__))) require 'timelog4r/utils' require 'timelog4r/xml_parser' =begin rdoc Timelog4r is TimelogAPI for ruby. see example/*.rb about TimelogAPI http://timelog.jp/api.asp =end class Timelog4r # OPTIONAL:: Set your Program's 'UserAgent'. attr_accessor :user_agent # REQUIRED:: Set your Timelog User-ID. attr_accessor :user_id # REQUIRED:: Set your Timelog PassWord. attr_accessor :password # TimelogAPI's BaseURI. BaseAddress = 'http://api.timelog.jp/' # Utilities. include Utils # Customized XML-Parser. include XML_Parser def initialize #:nodoc: @user_agent = 'timelog4r' end =begin rdoc Description:: get public timeline[http://timelog.jp/home/public.asp] Params:: options { :cnt => entry_count [Fixnum], :stat => entry_type(:bm|:gn) [String], :since => entry_after_since [Time] } [Hash] default nil Return:: {:title => 'Timelog ... ', entries => [...]} RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_timeline =end def get_public_timeline(options = nil) address = BaseAddress + 'public_msg.asp' address += parse_options(options) if options uri = create_uri(address) request = create_request(:get, uri) response = http_access(uri, request) result = parse_timeline(response) if response return result end =begin rdoc Description:: get user and friends timeline[http://timelog.jp/home] Params:: options { :cnt => entry_count [Fixnum], :since => entry_after_since [Time] } [Hash] default nil Return:: {:title => 'Timelog ... ', :entries => [...]} RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_timeline =end def get_friends_timeline(options = nil) address = BaseAddress + 'friends_msg.asp' address += parse_options(options) if options uri = create_uri(address) request = create_request(:get, uri, true) response = http_access(uri, request) result = parse_timeline(response) if response return result end =begin rdoc Description:: get my timeline[http:timelog.jp/home/?ac=user_id] Params:: options { :cnt => entry_count [Fixnum], :stat => entry_tipe [String], :since => entry_after_since [Time], :tag => find_entries_from_tag [String] } [Hash] default nil Return:: {:title => 'Timelog ... ', :entries => [...]} RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_timeline =end def get_my_timeline(options = nil) address = BaseAddress + 'my_msg.asp' address += parse_options(options) if options uri = create_uri(address) request = create_request(:get, uri, true) response = http_access(uri, request) result = parse_timeline(response) if response return result end =begin rdoc Description:: get my profile[http://user_id.timelog.jp] Return:: {:title => 'Timelog ... ', :user => {...} } RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_profile =end def get_profile address = BaseAddress + 'show.asp' uri = create_uri(address) request = create_request(:get, uri, true) response = http_access(uri, request) result = parse_profile(response) if response return result end =begin rdoc Description:: get friends list[http://timelog.jp/profile/frito.asp?ac=user_id] Params:: options { :cnt => friend_count [Fixnum] } [Hash] default nil Return:: {:title => 'Timelog ... ', :entries => [...]} RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_user_list =end def get_friend_list(options = nil) address = BaseAddress + 'friends.asp' address += parse_options(options) if options uri = create_uri(address) request = create_request(:get, uri, true) response = http_access(uri, request) result = parse_user_list(response) if response return result end =begin rdoc Description:: get fan list[http://timelog.jp/profile/frifrom.asp?ac=user_id] Params:: options { :cnt => user_count [Fixnum] } [Hash] default nil Return:: {:title => 'Timelog ... ', :entries => [...]} RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_user_list =end def get_fan_list(options = nil) address = BaseAddress + 'fan.asp' address += parse_options(options) if options uri = create_uri(address) request = create_request(:get, uri, true) response = http_access(uri, request) result = parse_user_list(response) if response return result end =begin rdoc Description:: get tag list[http://timelog.jp/taglist.asp] Params:: options { :cnt => tag_count [Fixnum] } [Hash] default nil Return:: {:title => 'Timelog ... ', :tags => [...]} RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_tag_list =end def get_tag_list(options = nil) address = BaseAddress + 'tags.asp' address += parse_options(options) if options uri = create_uri(address) request = create_request(:get, uri, true) response = http_access(uri, request) result = parse_tag_list(response) if response return result end =begin rdoc Description:: get direct messages[http://timelog.jp/profile/message.asp] Params:: options { :cnt => message_count [Fixnum] } [Hash] default nil Return:: {:title => 'Timelog ... ', :entries => [...]} RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_timeline =end def get_direct_messages(options = nil) address = BaseAddress + 'direct_msg.asp' address += parse_options(options) if options uri = create_uri(address) request = create_request(:get, uri, true) response = http_access(uri, request) result = parse_timeline(response) if response return result end =begin rdoc Description:: get reply to my memos[http://timelog.jp/profile/remsg.asp] Params:: options { :cnt => entry_count [Fixnum] } [Hash] default nil Return:: {:title => 'Timelog ... ', :entries => [...]} RelatedMethods:: Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access XML_Parser#parse_timeline =end def get_reply_list(options = nil) address = BaseAddress + 'res_msg.asp' address += parse_options(options) if options uri = create_uri(address) request = create_request(:get, uri, true) response = http_access(uri, request) result = parse_timeline(response) if response return result end =begin rdoc Description:: set tags to text. Params:: :text memo's body [String] :tags set tags [Array] Return:: text [String] =end def set_tags(text, tags) text += '[' + tags.join(',') + ']' return text end =begin rdoc Description:: update memo. insert :text in 'Timelog Command' Support. Params:: :text memo's body [Stirng] :res_id response to memo_id [String] default nil :tags update tags [Array] default nil Return:: true (case of 'update success') false (case of 'update failed') RelatedMethods:: set_tags Utils#parse_options Utils#create_uri Utils#create_request Utils#http_access =end def update(text, res_id = nil, tags = nil) text = set_tags(text, tags) if tags params = {:text => text} params[:remsgid] = res_id if res_id address = BaseAddress + 'new.asp' + parse_options(params) uri = create_uri(address) request = create_request(:post, uri, true) response = http_access(uri, request) return !response.nil? end =begin rdoc Description:: send a direct message to timelog-user. Params:: :text memo's body [String] :to send to timelog user_id [String] :res_id response to memo_id [String] default nil :tags update tags [Array] default nil Return:: true (case of 'send message success') false (case of 'send message failed') RelatedMethods:: update =end def send_message(text, to, res_id = nil, tags = nil) text = '/d @' + to + ' ' + text update(text, res_id, tags) end =begin rdoc Description:: update memo type of todo. Params:: :text memo's body [String] :time todo end-time [Time] :res_id response to memo_id [String] default nil :tags update tags [Array] default nil Return:: true (case of 'update success') false (case of 'update failed') RelatedMethods:: update =end def set_todo(text, time, res_id = nil, tags = nil) text = '/t ' + time.strftime('%Y%m%d%H%M') + ' ' + text update(text, res_id, tags) end =begin rdoc Description:: update memo type of bookmark. Params:: :text memo's body [String] :uri bookmarks uri [URI] :res_id response to memo_id [String] default nil :tags update tags [Array] default nil Return:: true (case of 'update success') false (case of 'update failed') RelatedMethods:: update =end def update_bookmark(text, uri, res_id = nil, tags = nil) text = '/b ' + uri.to_s + ' ' + text update(text, res_id, tags) end =begin rdoc Description:: update memo type of good. Params:: :text memo's body [String] :res_id response to memo_id [String] default nil :tags update tags [Array] default nil Return:: true (case of 'update success') false (case of 'update failed') RelatedMethods:: update =end def update_good(text, res_id = nil, tags = nil) text = '/g ' + text update(text, res_id, tags) end =begin rdoc Description:: update memo type of news. Params:: :text memo's body [String] :res_id response to memo_id [String] default nil :tags update tags [Array] default nil Return:: true (case of 'update success') false (case of 'update failed') RelatedMethods:: update =end def update_news(text, res_id = nil, tags = nil) text = '/n ' + text update(text, res_id, tags) end =begin rdoc Description:: update memo type of vote. Params:: :text memo's body [String] :res_id response to memo_id [String] default nil :tags update tags [Array] default nil Return:: true (case of 'update success') false (case of 'update failed') RelatedMethods:: update =end def update_vote(text, res_id = nil, tags = nil) text = '/j ' + text update(text, res_id, tags) end end