Fixes for launch

This commit is contained in:
Jacob Harris
2013-07-09 21:54:44 -04:00
parent 9e86a90334
commit c201b07a60
3 changed files with 116 additions and 0 deletions

51
ebook.rb Normal file
View File

@@ -0,0 +1,51 @@
# Worker code can be anything you want.
require 'rubygems'
require 'twitter'
require 'twitter_init'
require 'markov'
source_tweets = []
$rand_limit ||= 10
# randomly running only about 1 in $rand_limit times
unless rand($rand_limit) == 0
puts "Not running this time"
else
# Fetch a thousand tweets
begin
user_tweets = Twitter.user_timeline($source_account, :count => 200, :trim_user => true, :exclude_replies => false, :include_replies => true)
max_id = user_tweets.last.id
source_tweets += user_tweets.reject {|t| t.text =~ /(http:\/\/)|(\bRT\b)|(\bMT\b)|@/ }
25.times do
user_tweets = Twitter.user_timeline($source_account, :count => 200, :trim_user => true, :max_id => max_id - 1, :exclude_replies => false, :include_replies => true)
max_id = user_tweets.last.id
source_tweets += user_tweets.reject {|t| t.text =~ /(http:\/\/)|(\bRT\b)|(\bMT\b)|@/ }
end
rescue
end
puts "#{source_tweets.length} tweets found"
markov = MarkovChainer.new(2)
source_tweets.each do |twt|
markov.add_text(twt.text)
end
tweet = nil
5.times do
tweet = markov.generate_sentence
break if !source_tweets.any? {|t| t.text == tweet }
end
puts "TWEET: #{tweet}"
unless tweet.nil? || tweet == ''
Twitter.update(tweet)
end
end

9
ebook.worker Normal file
View File

@@ -0,0 +1,9 @@
# define the runtime language
runtime "ruby"
# exec is the file that will be executed:
exec "ebook.rb"
file "twitter_init.rb"
file "markov.rb"
gem 'twitter'

56
markov.rb Normal file
View File

@@ -0,0 +1,56 @@
class MarkovChainer
attr_reader :order
def initialize(order)
@order = order
@beginnings = []
@freq = {}
end
def add_text(text)
# make sure each paragraph ends with some sentence terminator
text.gsub!(/\n\s*\n/m, ".")
text << "."
seps = /([.!?;])/
sentence = ""
text.split(seps).each { |p|
if seps =~ p
add_sentence(sentence, p)
sentence = ""
else
sentence = p
end
}
end
def generate_sentence
res = @beginnings[rand(@beginnings.size)]
return nil if res.nil?
loop {
unless nw = next_word_for(res[-order, order])
return res[0..-2].join(" ") + res.last
end
res << nw
}
end
private
def add_sentence(str, terminator)
words = str.scan(/[\w'\-]+/)
return unless words.size > order # ignore short sentences
words << terminator
buf = []
words.each { |w|
buf << w
if buf.size == order + 1
(@freq[buf[0..-2]] ||= []) << buf[-1]
buf.shift
end
}
@beginnings << words[0, order]
end
def next_word_for(words)
arr = @freq[words]
arr && arr[rand(arr.size)]
end
end