livejournal 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/rdoctask'
5
5
  require 'rake/testtask'
6
6
 
7
7
  PKG_NAME = 'livejournal'
8
- PKG_VERSION = '0.0.1'
8
+ PKG_VERSION = '0.1.0'
9
9
 
10
10
  FILES = FileList[
11
11
  'Rakefile', 'README', 'LICENSE', 'setup.rb',
@@ -146,10 +146,10 @@ module LiveJournal
146
146
  end
147
147
  end
148
148
 
149
- # Yield most recent limit entries.
150
- def each_entry(limit=nil, &block)
151
- sql = 'SELECT * FROM entry ORDER BY itemid DESC'
152
- sql += " LIMIT #{limit}" if limit
149
+ # Yield a set of entries.
150
+ def each_entry(where=nil, &block)
151
+ sql = 'SELECT * FROM entry ORDER BY itemid ASC'
152
+ sql += " WHERE #{where}" if where
153
153
  query_entries sql, &block
154
154
  end
155
155
 
@@ -74,10 +74,15 @@ module LiveJournal
74
74
 
75
75
  def ==(other)
76
76
  [:subject, :event, :moodid, :mood, :music, :taglist, :pickeyword,
77
- :preformatted, :backdated, :comments, :time, :security, :allowmask,
77
+ :preformatted, :backdated, :comments, :security, :allowmask,
78
78
  :screening, :props].each do |attr|
79
79
  return false if send(attr) != other.send(attr)
80
80
  end
81
+ # compare time fields one-by-one because livejournal ignores the
82
+ # "seconds" field.
83
+ [:year, :mon, :day, :hour, :min, :zone].each do |attr|
84
+ return false if @time.send(attr) != other.time.send(attr)
85
+ end
81
86
  return true
82
87
  end
83
88
 
@@ -174,9 +179,67 @@ module LiveJournal
174
179
  end
175
180
  html
176
181
  end
182
+
183
+ def add_to_request req
184
+ req['event'] = self.event
185
+ req['lineendings'] = 'unix'
186
+ req['subject'] = self.subject
187
+
188
+ case self.security
189
+ when :public
190
+ req['security'] = 'public'
191
+ when :friends
192
+ req['security'] = 'usemask'
193
+ req['allowmask'] = 1
194
+ when :private
195
+ req['security'] = 'private'
196
+ when :custom
197
+ req['security'] = 'usemask'
198
+ req['allowmask'] = self.allowmask
199
+ end
200
+
201
+ req['year'], req['mon'], req['day'] =
202
+ self.time.year, self.time.mon, self.time.day
203
+ req['hour'], req['min'] = self.time.hour, self.time.min
204
+
205
+ { 'current_mood' => self.mood,
206
+ 'current_moodid' => self.moodid,
207
+ 'current_music' => self.music,
208
+ 'picture_keyword' => self.pickeyword,
209
+ 'taglist' => self.taglist.join(', '),
210
+ 'opt_preformatted' => self.preformatted ? 1 : 0,
211
+ 'opt_nocomments' => self.comments == :none ? 1 : 0,
212
+ 'opt_noemail' => self.comments == :noemail ? 1 : 0,
213
+ 'opt_backdated' => self.backdated ? 1 : 0,
214
+ 'opt_screening' =>
215
+ case self.screening
216
+ when :all; 'A'
217
+ when :anonymous; 'R'
218
+ when :nonfriends; 'F'
219
+ when :none; 'N'
220
+ when :default; ''
221
+ end
222
+ }.each do |name, value|
223
+ req["prop_#{name}"] = value
224
+ end
225
+ end
177
226
  end
178
227
 
179
228
  module Request
229
+ class PostEvent < Req
230
+ def initialize(user, entry)
231
+ super(user, 'postevent')
232
+ entry.add_to_request @request
233
+ @entry = entry
234
+ end
235
+
236
+ def run
237
+ super
238
+ @entry.itemid = @result['itemid'].to_i
239
+ @entry.anum = @result['anum'].to_i
240
+ end
241
+ end
242
+
180
243
  class GetEvents < Req
181
244
  # We support three different types of GetEvents:
182
245
  # * <tt>GetEvents.new(user, :itemid => itemid)</tt> (fetch a single item)
@@ -184,17 +247,19 @@ module LiveJournal
184
247
  # * <tt>GetEvents.new(user, :lastsync => lastsync)</tt> (for syncing)
185
248
  def initialize(user, opts)
186
249
  super(user, 'getevents')
187
- self['lineendings'] = 'unix'
250
+ @request['lineendings'] = 'unix'
188
251
 
189
252
  if opts.has_key? :itemid
190
- self['selecttype'] = 'one'
191
- self['itemid'] = opts[:itemid]
253
+ @request['selecttype'] = 'one'
254
+ @request['itemid'] = opts[:itemid]
192
255
  elsif opts.has_key? :recent
193
- self['selecttype'] = 'lastn'
194
- self['howmany'] = opts[:recent]
256
+ @request['selecttype'] = 'lastn'
257
+ @request['howmany'] = opts[:recent]
195
258
  elsif opts.has_key? :lastsync
196
- self['selecttype'] = 'syncitems'
197
- self['lastsync'] = opts[:lastsync] if opts[:lastsync]
259
+ @request['selecttype'] = 'syncitems'
260
+ @request['lastsync'] = opts[:lastsync] if opts[:lastsync]
261
+ else
262
+ raise ArgumentError, 'invalid options for GetEvents'
198
263
  end
199
264
  end
200
265
 
@@ -214,63 +279,27 @@ module LiveJournal
214
279
  entries[itemid].load_prop(prop['name'], prop['value'])
215
280
  end
216
281
 
217
- if @reqparams.has_key? 'itemid'
218
- return entries[@reqparams['itemid']]
282
+ if @request.has_key? 'itemid'
283
+ return entries[@request['itemid']]
219
284
  else
220
285
  return entries
221
286
  end
222
287
  end
223
288
  end
289
+
224
290
  class EditEvent < Req
225
291
  def initialize(user, entry, opts={})
226
292
  super(user, 'editevent')
227
- self['itemid'] = entry.itemid
228
- if entry.event
229
- self['event'] = entry.event
230
- elsif entry.entry.nil? and opts.has_key? :delete
231
- self['event'] = ''
232
- else
233
- raise AccidentalDeleteError
234
- end
235
- self['lineendings'] = 'unix'
236
- self['subject'] = entry.subject
237
293
 
238
- case entry.security
239
- when :public
240
- self['security'] = 'public'
241
- when :friends
242
- self['security'] = 'usemask'
243
- self['allowmask'] = 1
244
- when :private
245
- self['security'] = 'private'
246
- when :custom
247
- self['security'] = 'usemask'
248
- self['allowmask'] = entry.allowmask
294
+ @request['itemid'] = entry.itemid
295
+ if opts.has_key? :delete
296
+ @request['event'] = ''
297
+ else
298
+ entry.add_to_request @request
249
299
  end
250
300
 
251
- self['year'], self['mon'], self['day'] =
252
- entry.time.year, entry.time.mon, entry.time.day
253
- self['hour'], self['min'] = entry.time.hour, entry.time.min
254
-
255
- { 'current_mood' => entry.mood,
256
- 'current_moodid' => entry.moodid,
257
- 'current_music' => entry.music,
258
- 'picture_keyword' => entry.pickeyword,
259
- 'taglist' => entry.taglist.join(', '),
260
- 'opt_preformatted' => entry.preformatted ? 1 : 0,
261
- 'opt_nocomments' => entry.comments == :none ? 1 : 0,
262
- 'opt_noemail' => entry.comments == :noemail ? 1 : 0,
263
- 'opt_backdated' => entry.backdated ? 1 : 0,
264
- 'opt_screening' =>
265
- case entry.screening
266
- when :all; 'A'
267
- when :anonymous; 'R'
268
- when :nonfriends; 'F'
269
- when :none; 'N'
270
- when :default; ''
271
- end
272
- }.each do |name, value|
273
- self["prop_#{name}"] = value
301
+ if @request['event'].nil? or @request['event'].empty?
302
+ raise AccidentalDeleteError unless opts.has_key? :delete
274
303
  end
275
304
  end
276
305
  end
@@ -89,11 +89,11 @@ module LiveJournal
89
89
  end
90
90
  # Returns true if there are new posts available.
91
91
  def run
92
- self['lastupdate'] = @lastupdate if @lastupdate
92
+ @request['lastupdate'] = @lastupdate if @lastupdate
93
93
  super
94
- @lastupdate = self['lastupdate']
95
- @interval = self['interval']
96
- self['new'] == '1'
94
+ @lastupdate = @result['lastupdate']
95
+ @interval = @result['interval']
96
+ @result['new'] == '1'
97
97
  end
98
98
  end
99
99
  end
@@ -27,6 +27,7 @@ require 'livejournal/basic'
27
27
  require 'cgi'
28
28
  require 'net/http'
29
29
  require 'date'
30
+ require 'digest/md5'
30
31
 
31
32
  module LiveJournal
32
33
  module Request
@@ -58,13 +59,20 @@ module LiveJournal
58
59
  class Req #:nodoc:
59
60
  def initialize(user, mode)
60
61
  @user = user
61
- @reqparams = { "user" => user.username,
62
- "password" => user.password,
63
- "mode" => mode,
64
- "clientversion" => "Ruby",
65
- "ver" => 1 }
66
- @reqparams['usejournal'] = user.usejournal if user.usejournal
67
- @results = {}
62
+ @request = { 'mode' => mode,
63
+ 'clientversion' => 'Ruby',
64
+ 'ver' => 1 }
65
+ if user
66
+ challenge = GetChallenge.new.run
67
+ response = Digest::MD5.hexdigest(challenge +
68
+ Digest::MD5.hexdigest(user.password))
69
+ @request.update({ 'user' => user.username,
70
+ 'auth_method' => 'challenge',
71
+ 'auth_challenge' => challenge,
72
+ 'auth_response' => response })
73
+ @request['usejournal'] = user.usejournal if user.usejournal
74
+ end
75
+ @result = {}
68
76
  @verbose = false
69
77
  @dryrun = false
70
78
  end
@@ -72,18 +80,10 @@ module LiveJournal
72
80
  def verbose!; @verbose = true; end
73
81
  def dryrun!; @dryrun = true; end
74
82
 
75
- def []=(key, value)
76
- @reqparams[key] = value
77
- end
78
-
79
- def [](key)
80
- @result[key]
81
- end
82
-
83
83
  def run
84
84
  h = Net::HTTP.new('www.livejournal.com')
85
85
  h.set_debug_output $stderr if @verbose
86
- request = @reqparams.collect { |key, value|
86
+ request = @request.collect { |key, value|
87
87
  "#{CGI.escape(key)}=#{CGI.escape(value.to_s)}"
88
88
  }.join("&")
89
89
  p request if @verbose
@@ -91,8 +91,8 @@ module LiveJournal
91
91
  response, data = h.post('/interface/flat', request)
92
92
  parseresponse(data)
93
93
  dumpresponse if @verbose
94
- if self['success'] != "OK"
95
- raise ProtocolException, self['errmsg']
94
+ if @result['success'] != "OK"
95
+ raise ProtocolException, @result['errmsg']
96
96
  end
97
97
  end
98
98
 
@@ -110,8 +110,8 @@ module LiveJournal
110
110
  end
111
111
 
112
112
  def each_in_array(base)
113
- for i in 1..(self["#{base}_count"].to_i) do
114
- yield HashStrip.new("#{base}_#{i.to_s}_", self)
113
+ for i in 1..(@result["#{base}_count"].to_i) do
114
+ yield HashStrip.new("#{base}_#{i.to_s}_", @result)
115
115
  end
116
116
  end
117
117
  def build_array(base)
@@ -120,7 +120,17 @@ module LiveJournal
120
120
  array
121
121
  end
122
122
  end
123
+
124
+ class GetChallenge < Req
125
+ def initialize
126
+ super(nil, 'getchallenge')
127
+ end
128
+ def run
129
+ super
130
+ return @result['challenge']
131
+ end
132
+ end
123
133
  end
124
134
  end
125
135
 
126
- # vim: ts=2 sw=2 et :
136
+ # vim: ts=2 sw=2 et cino=(0 :
@@ -26,8 +26,7 @@
26
26
  require 'livejournal/request'
27
27
  # As well as a custom XML format via REST, for comments:
28
28
  # http://www.livejournal.com/developer/exporting.bml
29
- require 'net/http'
30
- require 'uri'
29
+ require 'open-uri'
31
30
  require 'livejournal/comments-xml'
32
31
 
33
32
  require 'livejournal/entry'
@@ -40,14 +39,14 @@ module LiveJournal
40
39
  def initialize(user, syncitems=nil, lastsync=nil)
41
40
  super(user, 'syncitems')
42
41
  @syncitems = syncitems || {}
43
- self['lastsync'] = lastsync if lastsync
42
+ @request['lastsync'] = lastsync if lastsync
44
43
  end
45
44
 
46
45
  def run
47
46
  super
48
47
  lasttime = nil
49
48
  @fetched = 0
50
- @total = self['sync_total'].to_i
49
+ @total = @result['sync_total'].to_i
51
50
  each_in_array('sync') do |item|
52
51
  item, time = item['item'], item['time']
53
52
  next if @syncitems.has_key? item
@@ -75,7 +74,7 @@ module LiveJournal
75
74
  end
76
75
  def run
77
76
  super
78
- self['ljsession']
77
+ @result['ljsession']
79
78
  end
80
79
  end
81
80
  end
@@ -145,13 +144,13 @@ module LiveJournal
145
144
  path = "/export_comments.bml?get=comment_#{mode}&startid=#{start}"
146
145
  # authas: hooray for features discovered by reading source!
147
146
  path += "&authas=#{@user.usejournal}" if @user.usejournal
148
- url = URI.parse(@user.server.url + path)
149
-
150
- http = Net::HTTP.new(url.host, url.port)
151
- resp, data = http.get(url, 'Cookie' => "ljsession=#{@session}")
152
- # XXX we'd like to stream this data to the XML parser.
153
- # is this possible?
154
- raise RuntimeError, "XXX" if resp.code != '200'
147
+
148
+ data = nil
149
+ open(@user.server.url + path,
150
+ 'Cookie' => "ljsession=#{@session}") do |f|
151
+ # XXX stream this data to the XML parser.
152
+ data = f.read
153
+ end
155
154
  return data
156
155
  end
157
156
  private :run_GET
data/sample/export CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/ruby
1
+ #!/usr/bin/ruby -I../lib
2
2
 
3
3
  require 'livejournal/sync'
4
4
  require 'livejournal/database'
data/sample/graph ADDED
@@ -0,0 +1,209 @@
1
+ #!/usr/bin/ruby -I../lib
2
+
3
+ begin
4
+ require 'rubygems'
5
+ require 'gruff'
6
+ rescue LoadError => e
7
+ puts <<EOT
8
+ Error loading libraries: #{e}
9
+ Though ljrb itself doesn't require them, the graph sample uses
10
+ the gruff library: http://nubyonrails.com/pages/gruff ,
11
+ which itself requires rubygems.
12
+ EOT
13
+ exit 1
14
+ end
15
+ require 'livejournal/database'
16
+ require 'livejournal/entry'
17
+ require 'optparse'
18
+ require 'time'
19
+
20
+ class Options
21
+ # required options
22
+ attr_reader :dbfile, :outfile, :mode
23
+ # optional options
24
+ attr_reader :smooth, :normalize, :geom, :starttime, :endtime
25
+ # mode-specific options
26
+ attr_reader :tags
27
+
28
+ def initialize
29
+ @smooth = 1
30
+ @dbfile = nil
31
+ @outfile = nil
32
+ @normalize = false
33
+ @mode = nil
34
+ @geom = 800
35
+ @opts = OptionParser.new do |o|
36
+ o.banner = "usage: graph [options] [modeparam [modeparam ...]]"
37
+ o.on('-d', '--db=FILE', 'database (required)') { |@dbfile| }
38
+ o.on('-o', '--out=FILENAME.PNG', 'output file (required)') { |@outfile| }
39
+ o.on('-g', '--geom=WxH', 'output geometry') { |@geom| }
40
+ o.on('--smooth=N',
41
+ 'merge every set of n consecutive datapoints') do |smooth|
42
+ @smooth = smooth.to_i
43
+ end
44
+ o.on('--normalize',
45
+ 'normalize relative to entry counts') { |@normalize| }
46
+ o.on('--start=TIME', 'start time') { |t| @starttime = Time.parse t }
47
+ o.on('--end=TIME', 'end time') { |t| @endtime = Time.parse t }
48
+ o.on('-m', '--mode=MODE',
49
+ 'mode (required) one of {tags, security}') do |mode|
50
+ case mode
51
+ when 'tags'
52
+ @mode = :tags
53
+ when 'security'
54
+ @mode = :security
55
+ else
56
+ die "bad mode #{mode}"
57
+ end
58
+ end
59
+ end
60
+ self
61
+ end
62
+ def parse!(argv)
63
+ @opts.parse! ARGV
64
+ check_params
65
+ self
66
+ end
67
+ def die(msg)
68
+ puts msg
69
+ puts @opts
70
+ exit 1
71
+ end
72
+ def check_params
73
+ die "must specify database." unless @dbfile
74
+ die "must specify output file." unless @outfile
75
+ die "must specify mode." unless @mode
76
+
77
+ case @mode
78
+ when :tags
79
+ @tags = ARGV
80
+ unless @tags.length > 0
81
+ die "must specify at least one tag as an extra command-line parameter."
82
+ end
83
+ end
84
+ end
85
+ end
86
+ $opts = Options.new.parse! ARGV
87
+
88
+ class DataSet
89
+ # store a series of (time, class, count) observations.
90
+
91
+ def initialize
92
+ # data: klass -> time -> count
93
+ @data = Hash.new { |h,k| h[k] = Hash.new { |h,k| h[k] = 0 } }
94
+ @firsttime = @lasttime = nil
95
+ @bucketing = :month
96
+ end
97
+
98
+ def bucket(time)
99
+ case @bucketing
100
+ when :month
101
+ mon = time.month
102
+ if $opts.smooth != 1
103
+ # when smooth = 3,
104
+ # 1 -> 1
105
+ # 3 -> 1
106
+ # 4 -> 4
107
+ # 5 -> 4
108
+ # 12 -> 10
109
+ mon = ((mon-1)/$opts.smooth * $opts.smooth) + 1
110
+ end
111
+ "%d-%02d" % [time.year, mon]
112
+ end
113
+ end
114
+
115
+ def each_bucket
116
+ case @bucketing
117
+ when :month
118
+ time = Date.parse(@firsttime.strftime('%Y-%m-01'))
119
+ lasttime = Date.parse(@lasttime.strftime('%Y-%m-01'))
120
+ lastbucket = nil
121
+ while time < lasttime
122
+ b = bucket(time)
123
+ yield b if b != lastbucket
124
+ lastbucket = b
125
+ time = time >> 1
126
+ end
127
+ end
128
+ end
129
+
130
+ def labels(count=5)
131
+ total = 0
132
+ each_bucket { total += 1 }
133
+ skip = (total / count.to_f).round
134
+
135
+ labels = {}
136
+ i = 0
137
+ each_bucket do |bucket|
138
+ labels[i] = bucket if i % skip == 0
139
+ i += 1
140
+ end
141
+ labels
142
+ end
143
+
144
+ def get_class(klass)
145
+ buckets = []
146
+ data = @data[klass]
147
+ each_bucket do |bucket|
148
+ buckets << if data.has_key? bucket
149
+ if $opts.normalize
150
+ data[bucket] / @data[:total][bucket].to_f
151
+ else
152
+ data[bucket]
153
+ end
154
+ else
155
+ 0
156
+ end
157
+ end
158
+ buckets
159
+ end
160
+
161
+ def add(klass, time, count=1)
162
+ @firsttime = time if @firsttime.nil? or time < @firsttime
163
+ @lasttime = time if @lasttime.nil? or time > @lasttime
164
+ @data[klass][bucket(time)] += count
165
+ end
166
+ end
167
+
168
+ dataset = DataSet.new
169
+ db = LiveJournal::Database.new $opts.dbfile
170
+ total_entries = 0
171
+
172
+ db.each_entry do |entry|
173
+ next if $opts.starttime and $opts.starttime > entry.time
174
+ next if $opts.endtime and $opts.endtime < entry.time
175
+
176
+ dataset.add(:total, entry.time, 1)
177
+ case $opts.mode
178
+ when :tags
179
+ entry.taglist.each do |tag|
180
+ dataset.add(tag, entry.time)
181
+ end
182
+ when :security
183
+ case entry.security
184
+ when :public; dataset.add(:public, entry.time)
185
+ when :friends; dataset.add(:friends, entry.time)
186
+ else; dataset.add(:other, entry.time)
187
+ end
188
+ end
189
+ total_entries += 1
190
+ end
191
+
192
+ g = Gruff::Line.new($opts.geom)
193
+ g.labels = dataset.labels
194
+ case $opts.mode
195
+ when :tags
196
+ g.title = 'Tag Rate'
197
+ $opts.tags.each do |tag|
198
+ g.data(tag, dataset.get_class(tag))
199
+ end
200
+ when :security
201
+ g.title = 'Entry Security'
202
+ [:public, :friends, :other].each do |sec|
203
+ g.data(sec.to_s, dataset.get_class(sec))
204
+ end
205
+ end
206
+ g.write $opts.outfile
207
+
208
+ # vim: ts=2 sw=2 et :
209
+
data/test/login.rb ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'livejournal/login'
4
+ require 'livejournal/entry'
5
+ require 'test/unit'
6
+
7
+ class TC_Login < Test::Unit::TestCase
8
+ def setup
9
+ @user = LiveJournal::User.new('test', 'test')
10
+ end
11
+
12
+ def test_login
13
+ login = LiveJournal::Request::Login.new(@user)
14
+ login.run
15
+ assert_not_equal(@user.fullname, nil)
16
+ end
17
+ end
18
+
19
+ # vim: ts=2 sw=2 et :
data/test/roundtrip.rb ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'livejournal/login'
4
+ require 'livejournal/entry'
5
+ require 'test/unit'
6
+
7
+ include LiveJournal
8
+
9
+ class TC_RoundTrip < Test::Unit::TestCase
10
+ def setup
11
+ @user = User.new('ljrb_test', 'test_ljrb')
12
+ end
13
+
14
+ def roundtrip entry
15
+ postevent = Request::PostEvent.new(@user, entry)
16
+ postevent.run
17
+
18
+ getevents = Request::GetEvents.new(@user,
19
+ :itemid => entry.itemid)
20
+ new_entry = getevents.run
21
+ assert_equal(new_entry, entry)
22
+
23
+ delete = Request::EditEvent.new(@user, entry, :delete => true)
24
+ delete.run
25
+ end
26
+
27
+ def test_roundtrip
28
+ e = Entry.new
29
+ e.subject = 'subject'
30
+ e.event = 'event here'
31
+ e.time = LiveJournal::coerce_gmt Time.now
32
+ roundtrip e
33
+
34
+ e = Entry.new
35
+ e.subject = 'subject here'
36
+ e.event = 'eventblah here'
37
+ e.time = LiveJournal::coerce_gmt Time.now
38
+ e.comments = :noemail
39
+ e.preformatted = true
40
+ e.security = :friends
41
+ roundtrip e
42
+ end
43
+ end
44
+
45
+ # vim: set ts=2 sw=2 et cino=(0 :
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: livejournal
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2006-03-09 00:00:00 +09:00
6
+ version: 0.1.0
7
+ date: 2006-03-25 00:00:00 +09:00
8
8
  summary: module for interacting with livejournal
9
9
  require_paths:
10
10
  - lib
@@ -45,12 +45,14 @@ files:
45
45
  - lib/livejournal/comment.rb
46
46
  - lib/livejournal/friends.rb
47
47
  - lib/livejournal/basic.rb
48
- - sample/lj
48
+ - sample/graph
49
49
  - sample/export
50
50
  - test/database.rb
51
51
  - test/time.rb
52
52
  - test/checkfriends.rb
53
+ - test/roundtrip.rb
53
54
  - test/comments-xml.rb
55
+ - test/login.rb
54
56
  test_files: []
55
57
  rdoc_options: []
56
58
  extra_rdoc_files: []
data/sample/lj DELETED
@@ -1,23 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- require 'livejournal/login'
4
- require 'livejournal/entry'
5
-
6
- puts "Logging in..."
7
- user = LiveJournal::User.new('test', 'test')
8
- login = LiveJournal::Request::Login.new(user)
9
- login.run
10
-
11
- puts "Login response:"
12
- login.dumpresponse
13
-
14
- puts "User's full name: #{user.fullname}"
15
-
16
- if false
17
- get = LiveJournal::Request::GetEvents.new(user, :recent => 1)
18
- entry = get.run
19
- get.dumpresponse
20
- p entry
21
- end
22
-
23
- # vim: ts=2 sw=2 et :