class Wunderlist::API
The API
class provides access to the Wunderlist
API
over HTTP.
Attributes
domain[R]
Domain of the Wunderlist
API
email[R]
Your email address from login
path[R]
Path of the Wunderlist
API
session[R]
Wunderlist
Session ID
Public Class Methods
new(domain = "www.wunderlist.com", path = "/")
click to toggle source
# File lib/wunderlist/api.rb, line 53 def initialize(domain = "www.wunderlist.com", path = "/") @domain = domain @path = path @http = Net::HTTP.new(@domain) @logged_in = false end
Public Instance Methods
create_list(name)
click to toggle source
Create new empty List
# File lib/wunderlist/api.rb, line 132 def create_list(name) Wunderlist::List.new(name, false, self).save end
destroy(obj)
click to toggle source
flush()
click to toggle source
Delete internal list caching
# File lib/wunderlist/api.rb, line 85 def flush @lists = nil end
inbox()
click to toggle source
Get INBOX list
# File lib/wunderlist/api.rb, line 98 def inbox lists.values.detect { |list| list.inbox } end
lists()
click to toggle source
Return all lists
# File lib/wunderlist/api.rb, line 91 def lists @lists = load_lists if @lists == nil @lists end
login(email, password)
click to toggle source
Request new session and connects it with your login credentials
# File lib/wunderlist/api.rb, line 62 def login(email, password) get_session if @session == nil return true if @logged_in @email = email req = prepare_request(Net::HTTP::Post.new "#{@path}/ajax/user") req.set_form_data({ "email" => @email, "password" => Digest::MD5.hexdigest(password) }) res = JSON.parse(@http.request(req).body) @logged_in = true if res["code"] == 200 @logged_in end
login_by_session(sessid)
click to toggle source
Login with a session ID without login credentials
# File lib/wunderlist/api.rb, line 77 def login_by_session(sessid) return if @logged_in @logged_in = true @session = sessid end
save(obj)
click to toggle source
tasks(list)
click to toggle source
Load and parse tasks from Wunderlist
API
# File lib/wunderlist/api.rb, line 104 def tasks(list) list_obj = list.is_a?(Wunderlist::List) ? list : lists[list] list = list.id if list.is_a? Wunderlist::List request = prepare_request(Net::HTTP::Get.new "#{@path}/ajax/lists/id/#{list}") response = @http.request request result = [] Nokogiri::HTML(JSON.parse(response.body)["data"]).css("li.more").each do |html_task| task = Wunderlist::Task.new task.id = html_task.attributes["id"].value.to_i task.name = html_task.css("span.description").first.content task.important = html_task.css("span.fav").empty? ? false : true task.done = html_task.attributes["class"].value.split(" ").include?("done") html_timestamp = html_task.css("span.timestamp") task.date = Time.at(html_timestamp.first.attributes["rel"]. value.to_i).to_date unless html_timestamp.empty? task.api = self task.list = list_obj result << task end result end
Protected Instance Methods
destroy_list(obj)
click to toggle source
# File lib/wunderlist/api.rb, line 157 def destroy_list(obj) json_data = { "id" => obj.id, "deleted" => 1 } request = prepare_request(Net::HTTP::Post.new "#{@path}/ajax/lists/update") request.set_form_data "list" => json_data.to_json response = @http.request request response_json = JSON.parse(response.body) if response_json["status"] == "success" obj.id = nil return obj end false end
destroy_task(obj)
click to toggle source
# File lib/wunderlist/api.rb, line 172 def destroy_task(obj) json_data = {"list_id" => obj.list_id, "name" => obj.name, "deleted" => 1} request = prepare_request(Net::NTTP::Post.new "#{@path}/ajax/tasks/update") request.set_form_data "task" => json_data response = @http.request request response_json = JSON.parse(response.body) if response_json["status"] == "success" obj.id = nil return obj end false end
get_session()
click to toggle source
# File lib/wunderlist/api.rb, line 261 def get_session res = @http.request_get("#{@path}/account") @session = res["Set-Cookie"].match(/WLSESSID=([0-9a-zA-Z]+)/)[1] end
load_lists()
click to toggle source
# File lib/wunderlist/api.rb, line 266 def load_lists request = prepare_request(Net::HTTP::Get.new "#{@path}/ajax/lists/all") response = @http.request request result = {} JSON.parse(response.body)["data"].each do |list_elem| list = Wunderlist::List.new list.id = list_elem[0].to_i list.name = list_elem[1]["name"] list.inbox = list_elem[1]["inbox"] == "1" ? true : false list.shared = list_elem[1]["shared"] == "1" ? true : false list.api = self result[list.id] = list end result end
prepare_request(req)
click to toggle source
# File lib/wunderlist/api.rb, line 285 def prepare_request(req) req["Cookie"] = "WLSESSID=#{@session}" req end
save_list(obj)
click to toggle source
# File lib/wunderlist/api.rb, line 228 def save_list(obj) return update_list(obj) if obj.id json_data = {"name" => obj.name} request = prepare_request(Net::HTTP::Post.new "#{@path}/ajax/lists/insert") request.set_form_data "list" => json_data.to_json response = @http.request request response_json = JSON.parse(response.body) if response_json["status"] == "success" obj.id = response_json["id"] return obj end nil end
save_task(obj)
click to toggle source
# File lib/wunderlist/api.rb, line 188 def save_task(obj) return update_task(obj) if obj.id json_data = {"list_id" => obj.list.id, "name" => obj.name, "date" => 0} json_data["date"] = obj.date.to_time.to_i if obj.date request = prepare_request(Net::HTTP::Post.new "#{@path}/ajax/tasks/insert") request.set_form_data "task" => json_data.to_json response = @http.request request response_json = JSON.parse(response.body) if response_json["status"] == "success" obj.id = response_json["id"] obj.list.tasks << obj return obj end nil end
update_list(obj)
click to toggle source
# File lib/wunderlist/api.rb, line 245 def update_list(obj) json_data = {} json_data["id"] = obj.id json_data["name"] = obj.name request = prepare_request(Net::HTTP::Post.new "#{@path}/ajax/lists/update") request.set_form_data "list" => json_data.to_json response = @http.request request if JSON.parse(response.body)["status"] == "success" return obj end nil end
update_task(obj)
click to toggle source
# File lib/wunderlist/api.rb, line 208 def update_task(obj) json_data = {} json_data["id"] = obj.id json_data["important"] = obj.important ? 1 : 0 json_data["done"] = obj.done ? 1 : 0 json_data["name"] = obj.name json_data["date"] = obj.date ? obj.date.to_time.to_i.to_s : "0" request = prepare_request(Net::HTTP::Post.new "#{@path}/ajax/tasks/update") request.set_form_data "task" => json_data.to_json response = @http.request request response_json = JSON.parse response.body if response_json["status"] == "success" return obj end nil end