ubiquitously 0.0.1.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/README.markdown +224 -19
  2. data/Rakefile +12 -4
  3. data/bin/u.me +4 -0
  4. data/lib/ubiquitously.rb +56 -7
  5. data/lib/ubiquitously/commands/base.rb +118 -0
  6. data/lib/ubiquitously/commands/post.rb +108 -0
  7. data/lib/ubiquitously/commands/user.rb +111 -0
  8. data/lib/ubiquitously/extensions/callbacks.rb +62 -0
  9. data/lib/ubiquitously/extensions/core.rb +88 -0
  10. data/lib/ubiquitously/extensions/mechanize.rb +35 -0
  11. data/lib/ubiquitously/models/base.rb +18 -0
  12. data/lib/ubiquitously/models/page.rb +28 -0
  13. data/lib/ubiquitously/models/post.rb +66 -0
  14. data/lib/ubiquitously/models/service.rb +1 -0
  15. data/lib/ubiquitously/models/service/account.rb +57 -0
  16. data/lib/ubiquitously/models/service/account/authorizable.rb +58 -0
  17. data/lib/ubiquitously/models/service/account/loggable.rb +50 -0
  18. data/lib/ubiquitously/models/service/account/restful.rb +21 -0
  19. data/lib/ubiquitously/models/service/post.rb +59 -0
  20. data/lib/ubiquitously/models/service/post/loggable.rb +64 -0
  21. data/lib/ubiquitously/models/service/post/ownable.rb +31 -0
  22. data/lib/ubiquitously/models/service/post/postable.rb +73 -0
  23. data/lib/ubiquitously/models/service/post/restful.rb +52 -0
  24. data/lib/ubiquitously/models/user.rb +128 -0
  25. data/lib/ubiquitously/services/blogger_den.rb +68 -0
  26. data/lib/ubiquitously/services/chetzit.rb +37 -0
  27. data/lib/ubiquitously/services/code_project.rb +21 -0
  28. data/lib/ubiquitously/services/delicious.rb +54 -0
  29. data/lib/ubiquitously/services/design_bump.rb +41 -0
  30. data/lib/ubiquitously/services/designgizer.rb +21 -0
  31. data/lib/ubiquitously/services/designr_fix.rb +21 -0
  32. data/lib/ubiquitously/services/digg.rb +151 -0
  33. data/lib/ubiquitously/services/digzign.rb +25 -0
  34. data/lib/ubiquitously/services/diigo.rb +68 -0
  35. data/lib/ubiquitously/services/dzone.rb +132 -0
  36. data/lib/ubiquitously/services/dzone_snippets.rb +39 -0
  37. data/lib/ubiquitously/services/facebook.rb +42 -0
  38. data/lib/ubiquitously/services/faves.rb +81 -0
  39. data/lib/ubiquitously/services/favshare.rb +78 -0
  40. data/lib/ubiquitously/services/flikode.rb +38 -0
  41. data/lib/ubiquitously/services/friendfeed.rb +21 -0
  42. data/lib/ubiquitously/services/gist.rb +52 -0
  43. data/lib/ubiquitously/services/google_buzz.rb +15 -0
  44. data/lib/ubiquitously/services/identica.rb +15 -0
  45. data/lib/ubiquitously/services/jump_tags.rb +21 -0
  46. data/lib/ubiquitously/services/kailoon.rb +27 -0
  47. data/lib/ubiquitously/services/meta_filter.rb +26 -0
  48. data/lib/ubiquitously/services/mixx.rb +94 -0
  49. data/lib/ubiquitously/services/mmo.rb +22 -0
  50. data/lib/ubiquitously/services/mvc_forge.rb +37 -0
  51. data/lib/ubiquitously/services/my_space.rb +25 -0
  52. data/lib/ubiquitously/services/nestdev.rb +36 -0
  53. data/lib/ubiquitously/services/newsvine.rb +76 -0
  54. data/lib/ubiquitously/services/pixel_groovy.rb +22 -0
  55. data/lib/ubiquitously/services/posterous.rb +24 -0
  56. data/lib/ubiquitously/services/programmers_heaven.rb +21 -0
  57. data/lib/ubiquitously/{propeller.rb → services/propeller.rb} +17 -26
  58. data/lib/ubiquitously/services/queness.rb +38 -0
  59. data/lib/ubiquitously/services/reddit.rb +62 -0
  60. data/lib/ubiquitously/services/scribd.rb +21 -0
  61. data/lib/ubiquitously/services/script_and_style.rb +23 -0
  62. data/lib/ubiquitously/services/sharebrain.rb +19 -0
  63. data/lib/ubiquitously/services/shoutwire.rb +34 -0
  64. data/lib/ubiquitously/services/slideshare.rb +70 -0
  65. data/lib/ubiquitously/services/smipple.rb +21 -0
  66. data/lib/ubiquitously/services/snipplr.rb +67 -0
  67. data/lib/ubiquitously/services/snipt.rb +49 -0
  68. data/lib/ubiquitously/services/sphinn.rb +24 -0
  69. data/lib/ubiquitously/services/stumble_upon.rb +67 -0
  70. data/lib/ubiquitously/services/stumpedia.rb +13 -0
  71. data/lib/ubiquitously/services/tumblr.rb +28 -0
  72. data/lib/ubiquitously/services/tweako.rb +53 -0
  73. data/lib/ubiquitously/services/twitter.rb +60 -0
  74. data/lib/ubiquitously/services/web_blend.rb +25 -0
  75. data/lib/ubiquitously/services/webdev5.rb +32 -0
  76. data/lib/ubiquitously/services/who_freelance.rb +21 -0
  77. data/lib/ubiquitously/services/wordtaps.rb +36 -0
  78. data/lib/ubiquitously/services/yahoo_buzz.rb +64 -0
  79. data/lib/ubiquitously/services/youblr.rb +15 -0
  80. data/lib/ubiquitously/services/zabox.rb +22 -0
  81. data/lib/ubiquitously/support/active_record.rb +25 -0
  82. data/lib/ubiquitously/support/storage.rb +71 -0
  83. data/test/config/cookies.yml +111 -0
  84. data/test/config/credentials.yml +7 -0
  85. data/test/config/secrets.yml +33 -0
  86. data/test/config/tokens.yml +30 -0
  87. data/test/meta.html +19 -0
  88. data/test/test_delicious.rb +37 -0
  89. data/test/test_digg.rb +57 -0
  90. data/test/test_dzone.rb +23 -18
  91. data/test/test_facebook.rb +40 -0
  92. data/test/test_faves.rb +18 -20
  93. data/test/test_helper.rb +8 -1
  94. data/test/test_newsvine.rb +3 -3
  95. data/test/test_page.rb +21 -0
  96. data/test/test_post.rb +55 -0
  97. data/test/test_propeller.rb +2 -2
  98. data/test/test_reddit.rb +26 -4
  99. data/test/test_stumble_upon.rb +23 -3
  100. data/test/test_twitter.rb +33 -0
  101. data/test/test_user.rb +22 -0
  102. metadata +199 -24
  103. data/lib/ext.rb +0 -37
  104. data/lib/ubiquitously/base.rb +0 -56
  105. data/lib/ubiquitously/dzone.rb +0 -111
  106. data/lib/ubiquitously/faves.rb +0 -43
  107. data/lib/ubiquitously/mister_wong.rb +0 -11
  108. data/lib/ubiquitously/mixins/resourceful.rb +0 -50
  109. data/lib/ubiquitously/mixx.rb +0 -66
  110. data/lib/ubiquitously/newsvine.rb +0 -54
  111. data/lib/ubiquitously/reddit.rb +0 -46
  112. data/lib/ubiquitously/sphinn.rb +0 -11
  113. data/lib/ubiquitously/stumble_upon.rb +0 -61
  114. data/test/config.yml +0 -18
@@ -0,0 +1,53 @@
1
+ module Ubiquitously
2
+ module Tweako
3
+ class Account < Ubiquitously::Service::Account
4
+ def login
5
+ page = agent.get("http://www.tweako.com/?q=user/login")
6
+ form = page.forms.detect { |form| form.form_node["id"] == "user_login" }
7
+ form["edit[name]"] = username
8
+ form["edit[pass]"] = password
9
+ page = form.submit
10
+
11
+ authorize!(page.title !~ /^user account/i)
12
+ end
13
+ end
14
+
15
+ class Post < Ubiquitously::Service::Post
16
+ # Either your first 400 characters will be used,
17
+ # or you can determine where the teaser ends
18
+ # by starting a new paragraph before the first 400 characters.
19
+ # Make sure there is no text formatting or images in the teasers!
20
+ #
21
+ # A comma-separated list of terms describing this content.
22
+ # Example: photoshop, free software.
23
+ # Limit the amount of terms to a maximum of 6. Please choose relevent and descriptive terms.
24
+ # Enter tags in ALL lower-case letters, and ensure spelling is correct.
25
+ def tokenize
26
+ super.merge(
27
+ :description => self.description[0..400],
28
+ :tags => self.tags[0..6].taggify(" ", ", ")
29
+ )
30
+ end
31
+
32
+ def create
33
+ page = agent.get("http://www.tweako.com/node/add/storylink")
34
+ form = page.forms.detect { |form| form.form_node["id"] == "node-form" }
35
+
36
+ form["edit[title]"] = token[:title]
37
+ form["edit[vote_storylink_url]"] = token[:url]
38
+ form.field_with(:name => "edit[taxonomy][1]").options.each do |option|
39
+ option.select if option.value.to_s == "11"
40
+ end
41
+ form["edit[taxonomy][tags][2]"] = token[:tags]
42
+ form["edit[body]"] = token[:description]
43
+ form["op"] = "Submit"
44
+
45
+ unless debug?
46
+ page = form.submit
47
+ end
48
+
49
+ true
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,60 @@
1
+ module Ubiquitously
2
+ module Twitter
3
+ class Account < Ubiquitously::Service::Account
4
+ uses :oauth
5
+
6
+ def login
7
+ # only login if we don't have cookies
8
+ url = "http://localhost:4567/"
9
+ hash = ::TwitterToken.authorize(url)
10
+ options = {:url => hash[:url]}
11
+ if cookies?
12
+ raise "COOKIES"
13
+ options.merge!(:headers => {"Cookie" => user.cookies_for(:twitter)})
14
+ page = agent.get(options, [], url)
15
+ else
16
+ page = agent.get(options, [], url)
17
+ form = page.forms.first
18
+ form["session[username_or_email]"] = username
19
+ form["session[password]"] = password
20
+ page = form.submit
21
+ end
22
+
23
+ if page.uri.to_s =~ /http:\/\/api\.twitter\.com\/oauth\/authenticate/i
24
+ if page.links.first.href !~ /http:\/\/localhost/
25
+ page = page.forms.last.submit
26
+ end
27
+ end
28
+
29
+ authorize!(page.title =~ /Redirecting you back to the application/i)
30
+
31
+ location = URI.parse(page.links.first.href)
32
+ verifier = Rack::Utils.parse_query(location.query)["oauth_verifier"]
33
+
34
+ # do something with the oauth token, save it in the cookie?
35
+ self.credentials = ::TwitterToken.access(
36
+ :token => hash[:token],
37
+ :secret => hash[:secret],
38
+ :oauth_verifier => verifier
39
+ )
40
+
41
+ logged_in?
42
+ end
43
+ end
44
+
45
+ class Post < Ubiquitously::Service::Post
46
+ def create
47
+ response = access_token.post("/statuses/update.json", {
48
+ "status" => token[:description],
49
+ "include_entities" => true
50
+ })
51
+
52
+ result = JSON.parse(response.body)
53
+
54
+ if result.has_key?("error")
55
+ raise result["error"].to_s
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,25 @@
1
+ module Ubiquitously
2
+ module WebBlend
3
+ class Account < Ubiquitously::Service::Account
4
+ def login
5
+ page = agent.get("http://digzign.com/login")
6
+ form = page.form_with(:name => "loginform")
7
+ form["username"] = username
8
+ form["password"] = password
9
+ page = form.submit
10
+
11
+ authorize!(page.title =~ /Like Digg/i)
12
+ end
13
+ end
14
+
15
+ class Post < Ubiquitously::Service::Post
16
+ def save(options = {})
17
+ return false if !valid?
18
+
19
+ authorize
20
+
21
+ page = agent.get("")
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ module Ubiquitously
2
+ module Webdev5
3
+ class Account < Ubiquitously::Service::Account
4
+ def login
5
+ page = agent.get("http://webdev5.com/user/login")
6
+ form = page.forms.detect {|form| form.form_node["id"] == "user-login"}
7
+ form["name"] = username
8
+ form["pass"] = password
9
+ page = form.submit
10
+
11
+ authorize!(page.title.strip !~ /^User account/i)
12
+ end
13
+ end
14
+
15
+ class Post < Ubiquitously::Service::Post
16
+ submit_to "http://webdev5.com/submit?url=:url&title=:title&body=:body"
17
+
18
+ def create
19
+ page = agent.get("http://webdev5.com/submit")
20
+ form = page.forms.detect {|form| form.form_node["id"] == "node-form"}
21
+
22
+ form["url"] = token[:url]
23
+ form["title"] = token[:title]
24
+ form["body"] = token[:body]
25
+ form.field_with(:name => "taxonomy[1]").options.each do |option|
26
+
27
+ end
28
+ form["taxonomy[tags][2]"] = token[:tags]
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ module Ubiquitously
2
+ module WhoFreelance
3
+ class Account < Ubiquitously::Service::Account
4
+ def login
5
+ page = agent.get("http://service.com/login")
6
+ form = page.form_with(:name => "loginform")
7
+ form["username"] = username
8
+ form["password"] = password
9
+ page = form.submit
10
+
11
+ authorize!(page.title =~ /Some title/i)
12
+ end
13
+ end
14
+
15
+ class Post < Ubiquitously::Service::Post
16
+ def create
17
+ page = agent.get("")
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ module Ubiquitously
2
+ module Wordtaps
3
+ class Account < Ubiquitously::Service::Account
4
+ def login
5
+ page = agent.get("http://wordtaps.com/wp-login.php")
6
+ form = page.form_with(:name => "loginform")
7
+ form["log"] = username
8
+ form["pwd"] = password
9
+ form.checkboxes.first.check
10
+ page = form.submit
11
+
12
+ authorize!(page.parser.css("#login_error").first.nil?)
13
+ end
14
+ end
15
+
16
+ class Post < Ubiquitously::Service::Post
17
+ def create
18
+ page = agent.get("http://wordtaps.com/")
19
+ form = page.form_with(:name => "new_post")
20
+
21
+ form["posttitle"] = token[:title]
22
+ form["posturl"] = token[:url]
23
+ form.field_with(:name => "category").options.each do |option|
24
+ option.select if option.value.to_s == "5"
25
+ end
26
+ # max length == 800
27
+ form["tags"] = token[:tags]
28
+ form["posttext"] = token[:description]
29
+
30
+ page = form.submit
31
+
32
+ true
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,64 @@
1
+ module Ubiquitously
2
+ module YahooBuzz
3
+ class Account < Ubiquitously::Service::Account
4
+ def login
5
+ page = agent.get("https://login.yahoo.com/config/login_verify2")
6
+ form = page.form_with(:name => "login_form")
7
+ form["login"] = username
8
+ form["passwd"] = password
9
+ page = form.submit
10
+
11
+ authorize!(page.title.to_s !~ /^Sign in/i)
12
+ end
13
+ end
14
+
15
+ class Post < Ubiquitously::Service::Post
16
+
17
+ # yahoo has 4 ajax forms on one page, but they make it look like it's 2 steps
18
+ def create
19
+ page = agent.get("http://buzz.yahoo.com/submit")
20
+
21
+ headers = {
22
+ "X-Requested-With" => "XMLHttpRequest",
23
+ "Content-Type" => "application/x-www-form-urlencoded; charset=UTF-8"
24
+ }
25
+
26
+ # url form
27
+ form = page.form_with(:name => "urlsubmissionform")
28
+ if page.body =~ /YAHOO\.Buzz\.Submit\.QueryDataUrl \= \"\\\/submit\\\/get\;_ylt=([^\"]+)\"/i
29
+ form.action = "http://buzz.yahoo.com/submit/get;_ylt=#{$1}"
30
+ end
31
+
32
+ form["url"] = token[:url]
33
+ result = form.submit(nil, headers)
34
+
35
+ # description form
36
+ if description
37
+ form = page.forms.detect do |form|
38
+ form.form_node["class"] == "inline-edit-form" &&
39
+ !form.form_node.css("input[value=submitSummary]").first.blank?
40
+ end
41
+ form["fieldvalue"] = description
42
+ form.submit(nil, headers)
43
+ end
44
+
45
+ # category form
46
+ form = page.forms.detect do |form|
47
+ form.form_node["class"] == "inline-edit-form" &&
48
+ !form.form_node.css("input[value=submitCategory]").first.blank?
49
+ end
50
+ # form.field_with(:name => "fieldvalue")
51
+
52
+ # captcha
53
+ form = page.form_with(:name => "submissiondataform")
54
+ captcha_image = form.form_node.css(".captcha-image img").first["src"]
55
+
56
+ system("open", captcha_image)
57
+ # enter captcha response in terminal
58
+ captcha_says = ask("Enter Captcha from Browser Image: ") { |q| q.echo = true }
59
+ form["submitCaptcha"] = captcha_says
60
+ result = form.submit(nil, headers)
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,15 @@
1
+ module Ubiquitously
2
+ module Youblr
3
+ class Account < Ubiquitously::Service::Account
4
+ end
5
+
6
+ class Post < Ubiquitously::Service::Post
7
+ validates_presence_of :url, :title, :description, :tags
8
+
9
+ def save(options = {})
10
+ return false unless valid?
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ module Ubiquitously
2
+ module Zabox
3
+ class Account < Ubiquitously::Service::Account
4
+ def login
5
+ page = agent.get("http://www.zabox.net/login.php")
6
+ form = page.forms.detect { |form| form.form_node["id"] == "thisform" }
7
+ form["username"] = username
8
+ form["password"] = password
9
+ form.checkboxes.first.check
10
+ page = form.submit
11
+
12
+ authorize!(page.parser.css("form .error").text !~ /ERROR/i)
13
+ end
14
+ end
15
+
16
+ class Post < Ubiquitously::Service::Post
17
+ def create
18
+ page = agent.get("http://www.zabox.net/submit")
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ module Ubiquitously
2
+ module Support
3
+ module ActiveRecord
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+ attr_accessor :ubiquitously_accounts
10
+
11
+ def ubiquitous(*args)
12
+ self.ubiquitously_accounts = args.flatten.map(&:to_s).uniq.map do |service|
13
+ "Ubiquitously::#{service.camelize}::Account".constantize
14
+ end
15
+ end
16
+ end
17
+
18
+ module InstanceMethods
19
+ def ubiquitously
20
+ @ubiquitously ||= Ubiquitously::User.new
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,71 @@
1
+ module Ubiquitously
2
+ module Storage
3
+ class Base
4
+ def initialize(*)
5
+
6
+ end
7
+
8
+ def save(cookies, credentials)
9
+
10
+ end
11
+
12
+ def load
13
+
14
+ end
15
+ end
16
+
17
+ class FileSystem < Base
18
+ attr_accessor :path
19
+
20
+ def initialize(path)
21
+ self.path = path
22
+ end
23
+
24
+ def save(cookies, credentials)
25
+ write("#{path}/cookies.yml", cookies)
26
+ write("#{path}/credentials.yml", credentials)
27
+ end
28
+
29
+ def load
30
+ {
31
+ :cookies => read("#{path}/cookies.yml"),
32
+ :credentials => read("#{path}/credentials.yml")
33
+ }
34
+ end
35
+
36
+ def read(path)
37
+ result = File.exists?(path) ? YAML.load_file(path) : {}
38
+ result = {} unless result.is_a?(Hash)
39
+ result
40
+ end
41
+
42
+ def write(path, content)
43
+ File.open(path, "w+") { |file| file.puts YAML.dump(content) }
44
+ end
45
+ end
46
+
47
+ class ActiveRecord < Base
48
+ attr_accessor :record, :cookies_attribute, :credentials_attribute
49
+
50
+ def initialize(record, cookies_attribute, credentials_attribute)
51
+ self.record = record
52
+ self.cookies_attribute = cookies_attribute
53
+ self.credentials_attribute = credentials_attribute
54
+ end
55
+
56
+ def save(cookies, credentials)
57
+ record.update_attributes(
58
+ cookies_attribute => cookies,
59
+ credentials_attribute => credentials
60
+ )
61
+ end
62
+
63
+ def load
64
+ {
65
+ :cookies => record.read_attribute(cookies_attribute),
66
+ :credentials => record.read_attribute(credentials_attribute)
67
+ }
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,111 @@
1
+ ---
2
+ api.twitter.com:
3
+ /:
4
+ original_referer: !ruby/object:Mechanize::Cookie
5
+ comment:
6
+ comment_url:
7
+ discard:
8
+ domain: api.twitter.com
9
+ expires:
10
+ max_age:
11
+ name: original_referer
12
+ path: /
13
+ port:
14
+ secure: false
15
+ value: JbKFAfGwv4RwApvTLqS%2BuUA9SZR5uydG0STMTRBXN6VwznNnN8%2Bh%2BY04%2FKTVMl2F3nmo8VGrXBNv17rc241SMIXssgyIxl3mMd9X34nDN9yZ0ygZ3I9CCO1a%2BydrZd4b
16
+ version: 0
17
+ guest_id: !ruby/object:Mechanize::Cookie
18
+ comment:
19
+ comment_url:
20
+ discard:
21
+ domain: api.twitter.com
22
+ expires: Wed, 15 Sep 2010 08:29:35 GMT
23
+ max_age:
24
+ name: guest_id
25
+ path: /
26
+ port:
27
+ secure: false
28
+ value: "128194737548762619"
29
+ version: 0
30
+ lang: !ruby/object:Mechanize::Cookie
31
+ comment:
32
+ comment_url:
33
+ discard:
34
+ domain: api.twitter.com
35
+ expires:
36
+ max_age:
37
+ name: lang
38
+ path: /
39
+ port:
40
+ secure: false
41
+ value: en
42
+ version: 0
43
+ faves.com:
44
+ /:
45
+ BlueDotCorp: !ruby/object:Mechanize::Cookie
46
+ comment:
47
+ comment_url:
48
+ discard:
49
+ domain: faves.com
50
+ expires:
51
+ max_age:
52
+ name: BlueDotCorp
53
+ path: /
54
+ port:
55
+ secure: false
56
+ value: F2DC2F95515534DBA004FB89BB4C27CA8E674DA134E8A7954F56D971A440E0096473422366292B53EC25F9E4594CDF580EEE2E230D1D294F277A42509EFC295B12369AFE4FFE7B3B07BC97B3647318BC
57
+ version: 0
58
+ FC: !ruby/object:Mechanize::Cookie
59
+ comment:
60
+ comment_url:
61
+ discard:
62
+ domain: faves.com
63
+ expires:
64
+ max_age:
65
+ name: FC
66
+ path: /
67
+ port:
68
+ secure: false
69
+ value: "1"
70
+ version: 0
71
+ user: !ruby/object:Mechanize::Cookie
72
+ comment:
73
+ comment_url:
74
+ discard:
75
+ domain: faves.com
76
+ expires:
77
+ max_age:
78
+ name: user
79
+ path: /
80
+ port:
81
+ secure: false
82
+ value: viatropos
83
+ version: 0
84
+ twitter.com:
85
+ /:
86
+ k: !ruby/object:Mechanize::Cookie
87
+ comment:
88
+ comment_url:
89
+ discard:
90
+ domain: twitter.com
91
+ expires: Mon, 23 Aug 2010 08:29:35 GMT
92
+ max_age:
93
+ name: k
94
+ path: /
95
+ port:
96
+ secure: false
97
+ value: 99.191.114.254.1281947375480906
98
+ version: 0
99
+ _twitter_sess: !ruby/object:Mechanize::Cookie
100
+ comment:
101
+ comment_url:
102
+ discard:
103
+ domain: twitter.com
104
+ expires:
105
+ max_age:
106
+ name: _twitter_sess
107
+ path: /
108
+ port:
109
+ secure: false
110
+ value: BAh7DDoOcmV0dXJuX3RvImRodHRwOi8vYXBpLnR3aXR0ZXIuY29tL29hdXRo%250AL2F1dGhlbnRpY2F0ZT9vYXV0aF90b2tlbj14S1RrWW8wbVcxNXlyOXZsVWZl%250AQTB4NlNqdUFjVWJRRWNOeU1lREJuRToTcGFzc3dvcmRfdG9rZW4iLWI3ZWQy%250ANzRmZWZjZmM2NzY5YWZhODdiNDhjNGVkZDgxZWFjN2JjODI6CXVzZXJpBKOG%250ADwE6DGNzcmZfaWQiJTI2OWUwYzYyMGI1YmNhNjhmOWYyNWVhY2RhODZhNWNi%250AOgdpZCIlMGFkMzU0NDRjOWI5M2Y2MzQ5NjBjNzJlZTYxMWIwZjciCmZsYXNo%250ASUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1%250Ac2VkewA6D2NyZWF0ZWRfYXRsKwiAlwR6KgE%253D--84da5fb62f46daaa5b777936d277afff6358f011
111
+ version: 0