rely on twitter api for source calls
This commit is contained in:
@@ -11,15 +11,9 @@ module Downloads
|
||||
|
||||
protected
|
||||
def rewrite_image_url(url, headers)
|
||||
# example: http://twitter.com/status
|
||||
url = url.sub(%r!^https?://twitter\.com!, "http://mobile.twitter.com")
|
||||
|
||||
if url =~ %r!^https?://mobile\.twitter\.com/\w+/status/\d+!
|
||||
source = ::Sources::Strategies::Twitter.new(url)
|
||||
source.get
|
||||
url = source.image_url
|
||||
end
|
||||
|
||||
source = ::Sources::Strategies::Twitter.new(url)
|
||||
source.get
|
||||
url = source.image_url
|
||||
return [url, headers]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,72 +13,10 @@ module Sources::Strategies
|
||||
end
|
||||
|
||||
def get
|
||||
agent.get(url) do |page|
|
||||
puts page.body
|
||||
@artist_name, @profile_url = get_profile_from_page(page)
|
||||
@image_url = get_image_url_from_page(page)
|
||||
end
|
||||
end
|
||||
|
||||
def get_profile_from_page(page)
|
||||
links = page.search("a.profile-link")
|
||||
if links.any?
|
||||
profile_url = "https://twitter.com" + links[0]["href"]
|
||||
artist_name = links[0].search("span")[0].text
|
||||
else
|
||||
profile_url = nil
|
||||
artist_name = nil
|
||||
end
|
||||
|
||||
return [artist_name, profile_url].compact
|
||||
end
|
||||
|
||||
def get_image_url_from_page(page)
|
||||
divs = page.search("div.media")
|
||||
|
||||
if divs.any?
|
||||
image_url = divs.search("img")[0]["src"] + ":large"
|
||||
else
|
||||
image_url = nil
|
||||
end
|
||||
|
||||
return image_url
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def add_cookie(mech, name, value)
|
||||
cookie = Mechanize::Cookie.new(name, value)
|
||||
cookie.domain = ".twitter.com"
|
||||
cookie.path = "/"
|
||||
mech.cookie_jar.add(cookie)
|
||||
end
|
||||
|
||||
def agent
|
||||
@agent ||= begin
|
||||
mech = Mechanize.new
|
||||
session = Cache.get("twitter-session")
|
||||
auth_token = Cache.get("twitter-auth-token")
|
||||
|
||||
if session && auth_token
|
||||
add_cookie(mech, "_twitter_sess", session)
|
||||
add_cookie(mech, "auth_token", auth_token)
|
||||
|
||||
elsif Danbooru.config.twitter_login
|
||||
mech.get("https://twitter.com/login") do |page|
|
||||
page.form_with(:action => "https://twitter.com/sessions") do |form|
|
||||
form["session[username_or_email]"] = Danbooru.config.twitter_login
|
||||
form["session[password]"] = Danbooru.config.twitter_password
|
||||
end.click_button
|
||||
end
|
||||
session = mech.cookie_jar.cookies.select{|c| c.name == "_twitter_sess"}.first
|
||||
Cache.put("twitter-session", session.value, 1.month) if session
|
||||
auth_token = mech.cookie_jar.cookies.select{|c| c.name == "auth_token"}.first
|
||||
Cache.put("twitter-auth-token", auth_token.value, 1.month) if auth_token
|
||||
end
|
||||
|
||||
mech
|
||||
end
|
||||
attrs = TwitterService.new.client.status(url).attrs
|
||||
@artist_name = attrs[:user][:name]
|
||||
@profile_url = "https://twitter.com/" + attrs[:user][:screen_name]
|
||||
@image_url = attrs[:entities][:media][0][:media_url] + ":large"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user