<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.gitignore</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -7,6 +7,7 @@
 
 # YEEZY'S RSS DOES NOT CONTAIN FULLTEXT 
 # WHICH WOULD HAVE MADE THIS MAD EASIER
+
 require 'rubygems'
 require 'yaml'
 require 'mechanize' # FOR PARSING KANYEBLOG
@@ -14,15 +15,11 @@ require 'open-uri' # FOR BIT.LY MAGIC
 require 'twitter' # FOR SHOUTING LOUDLY
 require 'sequel' # FOR STORING FOUND RANTS
 require 'logger' # FOR CHOPPING WOOD
-
-# RAPPERS MEET HACKERS? C'MON HELP US OUT
-# require 'rss/1.0'
-# require 'rss/2.0'
-# require 'open-uri'
+require 'cgi' # FOR CGI.escape -_-
 
 
 # MIN RANTITTUDE -- AVOID FALSE POSITIVES
-MINIMUM_RANT_LENGTH = 200
+MINIMUM_RANT_LENGTH = 500
 
 
 # WAS THIS TEXT WRITTEN BY KANYE? Y/N
@@ -39,27 +36,35 @@ end
 
 # SHORTEN A URL USING BIT.LY
 def bitlyfy(url)
+  url = CGI.escape(url)
   return open(&quot;http://bit.ly/api?url=#{url}&quot;, &quot;UserAgent&quot; =&gt; &quot;KANYE RANT DETECTOR &lt;http://fffff.at&gt;&quot;).read
 end
 
-# POST SOMETHING TO TWITTER
-def announce(text)
+# POST SOMETHING
+def announce(msg, url)
+  
+  text = &quot;\&quot;#{msg}\&quot;: #{url}&quot;
   puts &quot;ANNOUNCE: #{text}&quot;
   @config ||= YAML.load(File.open('config.yml'))
   raise &quot;No config file!&quot; if @config.blank?
+
+  # post to twitter...
   httpauth = Twitter::HTTPAuth.new(@config['username'], @config['password'])
   twitter = Twitter::Base.new(httpauth)
   twitter.update(text)
+    
 end
 
-def save(text, url, shorturl, time = DateTime.now)
+
+# SAVE TO SQLITE
+def save(body, excerpt, url, shorturl, time = DateTime.now)
 
   rants = DB[:rants]
   rows = rants.where(:url =&gt; url)
   
   if rows.blank? || rows.first.nil?
     puts &quot;NO RECORD! INSERTING NEW...&quot;
-    return rants.insert(:text =&gt; text, :url =&gt; url, :shorturl =&gt; shorturl, :created_at =&gt; time)
+    return rants.insert(:body =&gt; body, :excerpt =&gt; excerpt, :url =&gt; url, :shorturl =&gt; shorturl, :created_at =&gt; time)
   else
     puts &quot;RECORD ALREADY EXISTS =&gt; #{rows.first.inspect}&quot;
     return false # could not save, already exists
@@ -70,7 +75,7 @@ end
 
 # ------ WORK IT GIRL --------
 
-puts &quot;INITIALIZING DATABASE...&quot;
+STDERR.puts &quot;INITIALIZING DATABASE...&quot;
 
 
 # INITIALIZE OUR RANTERBASE
@@ -80,7 +85,8 @@ unless DB.table_exists?(:rants)
     primary_key :id
     String :url
     String :shorturl
-    String :text
+    String :body
+    String :excerpt
     DateTime :created_at
   end
 end
@@ -89,13 +95,17 @@ end
 # url = &quot;http://www.kanyeuniversecity.com/blog/&quot;
 # page w/ yesterday's twitter rant
 # url = &quot;http://www.kanyeuniversecity.com/blog/?em3106=0_-1__-1_~0_-1_5_2009_0_10&amp;em3298=&amp;em3282=&amp;em3281=&amp;em3161=&quot;
+
 # last page...
-url = &quot;http://www.kanyeuniversecity.com/blog/?em3106=0_-1__-1_~0_-1_5_2009_0_4820&amp;em3298=&amp;em3282=&amp;em3281=&amp;em3161=&quot;
+base = &quot;http://www.kanyeuniversecity.com/blog/&quot;
+url = &quot;#{base}?em3106=0_-1__-1_~0_-1_5_2009_0_4820&amp;em3298=&amp;em3282=&amp;em3281=&amp;em3161=&quot;
+# REBOOT -&gt; Last page
+# url = &quot;http://www.kanyeuniversecity.com/blog/?em3106=0_-1__-1_~0_-1_5_2009_0_4820&amp;em3298=&amp;em3282=&amp;em3281=&amp;em3161=&quot;
 
-puts &quot;CONTACTING INTERNETS... #{url}&quot;
+STDERR.puts &quot;CONTACTING INTERNETS... #{url}&quot;
 agent = WWW::Mechanize.new
-agent.user_agent = &quot;KANYE RANT DETECTOR &lt;http://fffff.at&gt;&quot;
-# agent.user_agent_alias = &quot;Mac Safari&quot;
+# agent.user_agent = &quot;KANYE RANT DETECTOR &lt;http://fffff.at&gt;&quot;
+agent.user_agent_alias = &quot;Mac Safari&quot;
 page = agent.get(url)
 
 # FOR PROPER ARCHIVAL
@@ -104,12 +114,17 @@ reverse_pagination = true
 # DETECT KANYES GOGOGOGO
 first = 0 # GETS OVERRIDDEN
 loop {
-  (page/'.rapper').each { |post|
-      
-    excerpt = post.content[0..100].gsub(&quot;\n&quot;,'').gsub(&quot;\t&quot;,'').chomp
-    permalink = url+(post/'a').first['href']
+  # IN REVERSE MODE...
+  (page/'.rapper').to_a.reverse.each { |post|
+
+    content = post.content.strip!
+    excerpt = post.content[0..120].gsub(&quot;\n&quot;,'').gsub(&quot;\t&quot;,'').strip!
+
+    links = (post/'a')
+    permalink = &quot;#{base}#{links[0]['href']}&quot;
     text = (post/'h5').first.content.strip_html
-    puts &quot;PROCESSING: #{excerpt} ...&quot;
+    # puts &quot;PROCESSING: #{excerpt}&quot;
+    # puts &quot;#{permalink}&quot;
 
     # FOUND A SHORTCUT: ONLY RANTS ARE IN SPECIFIED ELEMENT
     content = (post/'h5 div').first.content rescue ''
@@ -117,14 +132,13 @@ loop {
     # TELL THE MAFACKIN WORLD
     # BONUS: DO IT WITH AUTOTUNE
     if !content.empty? &amp;&amp; content.length &gt; MINIMUM_RANT_LENGTH
-      shorturl = bitlyfy(permalink)    
-      msg = &quot;KANYERANT! \&quot;#{excerpt}\&quot;: #{shorturl}&quot;
+      shorturl = bitlyfy(permalink)
 
       # ONLY ANNOUNCE ON SUCCESFUL SAVE TO DB
-      announce(msg) if save(msg, permalink, shorturl)
-      puts &quot;...&quot;
+      announce(excerpt, shorturl) if save(content, excerpt, permalink, shorturl)
+      puts &quot;&quot;
     
-      sleep 5
+      sleep 3
     
     end
     
@@ -133,14 +147,23 @@ loop {
   # RECURSE PAGES... THEY POST A LOT
   current = (page/'#emodpages strong')[1].content.to_i
   first = current if first == 0
-  puts &quot;current = #{current.inspect} -- first = #{first.inspect}&quot;
+  # puts &quot;current = #{current.inspect} -- first = #{first.inspect}&quot;
   prev = (page/'#emodpages a').select { |e| e.content.strip_html.to_i == (reverse_pagination ? current - 1 : current + 1) }
-  puts &quot;prev = #{prev}&quot;
-  break if prev.blank?
+  if prev.blank? or prev.first.nil?
+    STDERR.puts &quot;No prev link!&quot;
+    break
+  end
+  
+  sleep 1
+  link = prev.first
+  pagenum = link.content.strip_html.to_i
+  if pagenum.blank? || pagenum &lt; 1
+    STDERR.puts &quot;Pagenum #{pagenum} is the end of the road! We're done here&quot;
+    break 
+  end
   
-  sleep 3
-  page = agent.click(prev.first)
-  puts &quot;---- loaded page #{prev} -----&quot;
+  page = agent.click(link)
+  puts &quot;---- loaded page #{pagenum} ----- #{link['href']}&quot;
 
 }
 </diff>
      <filename>RANT-DETECTOR.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>kanyerants.db</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>18a6312f8a87f0963de0786f58e51aff6ccbb07f</id>
    </parent>
  </parents>
  <author>
    <name>Jamie Wilkinson</name>
    <email>jamie@tramchase.com</email>
  </author>
  <url>http://github.com/jamiew/KANYE-RANT-DETECTOR/commit/f5f167a4fdbbeca85d794f6f3ed1783a26d4e450</url>
  <id>f5f167a4fdbbeca85d794f6f3ed1783a26d4e450</id>
  <committed-date>2009-05-14T07:43:53-07:00</committed-date>
  <authored-date>2009-05-14T07:43:53-07:00</authored-date>
  <message>REVERSE CHRONO KANYE PARSING, FOR ARCHIVAL PURPOSES. TURNED UP RANT THRESHOLD, HAD SOME FALSE POSITIVES IN THE RUN LAST NIGHT. ALL LOOKS WELL IN THE KINGDOM...</message>
  <tree>f783d3a5bcc67a89738843f4681afd55b3621645</tree>
  <committer>
    <name>Jamie Wilkinson</name>
    <email>jamie@tramchase.com</email>
  </committer>
</commit>
