Twitter連携アプリ(API)を作っていると、認証のためにパスワードまで要求してきます。
そのためユーザービリティが下がるので自分用にユーザーIDだけでTwitterの情報(不フォローしてる人)を取ってくるプログラムを書きました。
今回はCapybaraとPoltergeistを使っています。
尚、サーバー負荷、著作権に関することなど今一度Twitter利用規約をご覧の上各自の自己責任でお願いします。以下コントローラーです。
indexアクションに飛ぶと動き出します。
class SessionsController < ApplicationController
require 'pp'
require 'capybara/dsl'
require 'capybara/poltergeist'
def index
redirect
end
def redirect
scrape = Scrape.new
scrape.visit_site
twitter_json
redirect_to root_path
end
class Scrape
include Capybara::DSL
def initialize()
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :inspector => true,js_errors: false, :timeout => 60)
end
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
Capybara.run_server = false
end
def visit_site
page.driver.headers = { "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2564.97 Safari/537.36" }
page.visit('https://twitter.com/******/following')
begin
fill_in "session[username_or_email]", with: "********"
fill_in "session[password]", with: "*******"
click_button "ログイン"
rescue
end
$friends = []
doc = Nokogiri::HTML.parse(page.html)
doc.css('.ProfileCard-avatarLink').each do |element|
name = element.attribute("title").value
id = element.attribute("href").value.gsub!("/","@")
element.css('img').each do |image|
image_url = image.attribute("src").value
friends = {}
friends = {name: name, id: id, image_url: image_url}
$friends << friends
end
end
pp $friends
end
end
def twitter_json
friends_json = []
links_json = []
$friends.each do |friend|
friend_json = {
"id" => friend[:id],
"image_url" => friend[:image_url]
}
friends_json << friend_json
link_json = {
"source" => friend[:id],
"target" => friend[:id]
}
links_json << link_json
end
complete_json = {
"node" => friends_json ,
"links" => links_json
}
@@u = "3"
File.open("public/#{@@u}.json","w") do |f|
f.write(complete_json.to_json)
end
end
以上。
何かあれば気軽に連絡ください。
たれみみ
@taremimimi_7