マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

フォローしているけど、フォローされてない人を探してみる

twitterでフォローしているけど、フォローされていない人を探すスクリプトを作った。ただしフォローしている、もしくはされているのどちらかが100を越えている場合は使えない。改良しなければ!またfriendsとfollowersを入れ替えれば逆もできる。

require 'net/http'
require 'rexml/document'

username = 'hoge'
password = 'hogehoge'

class User
    attr_reader :id
    attr_reader :name
    attr_reader :screen_name
    attr_reader :description
    attr_reader :url
    attr_reader :followers_count
    attr_reader :friends_count
    attr_reader :statuses_count
    attr_reader :location
    attr_reader :profile_image_url

    def initialize(element)
        @id = element.elements['id'].text()
        @name = element.elements['name'].text()
        @screen_name = element.elements['screen_name'].text()
        @description = element.elements['description'].text()
        @url = element.elements['url'].text()
        @followes_count = element.elements['followers_count'].text()
        @friends_count = element.elements['friends_count'].text()
        @statuses_count = element.elements['statuses_count'].text()
        @location = element.elements['location'].text()
        @profile_image_url = element.elements['profile_image_url'].text()
    end
end

class Twitter
    TwitterServer = 'twitter.com'

    def initialize(username, password)
        @username = username
        @password = password
    end

    def friends
        request = Net::HTTP::Get.new('http://twitter.com/statuses/friends.xml')
        request.basic_auth(@username, @password)
        http = Net::HTTP.start(TwitterServer)
        response = http.request(request)

        return get_users(response.body)
    end

    def followers
        request = Net::HTTP::Get.new('http://twitter.com/statuses/followers.xml')
        request.basic_auth(@username, @password)
        http = Net::HTTP.start(TwitterServer)
        response = http.request(request)

        return get_users(response.body)
    end

    def get_users(body)
        users = Array.new()
        doc = REXML::Document.new(body)
        doc.get_elements('/users/user').each{|element|
            users << User.new(element)
        }

        return users
    end
end

friends = Hash.new()

twitter = Twitter.new(username, password)
twitter.followers().each{|user|
    friends[user.name] = user.name
}

twitter.friends().each{|user|
    if !friends.key?(user.name)
        puts user.name
    end
}