バグ #916 » api_shortcuts.rb.diff
core/plugin/twitter/mikutwitter/api_shortcuts.rb | ||
---|---|---|
defcursorpager :followers_id, 'followers/ids', :paged_ids, :ids, id: :user_id
|
||
def followings(args = {})
|
||
idlist2userlist(friends_id(RELATIONAL_DEFAULT.merge(args))) end
|
||
idlist2userlist(friends_id(RELATIONAL_DEFAULT.merge(args)), cache: args[:cache]) end
|
||
def followers(args = {})
|
||
idlist2userlist(followers_id(RELATIONAL_DEFAULT.merge(args))) end
|
||
idlist2userlist(followers_id(RELATIONAL_DEFAULT.merge(args)), cache: args[:cache]) end
|
||
def direct_messages(args = {})
|
||
(self/:direct_messages).direct_messages({:count => 200}.merge(args)) end
|
||
... | ... | |
cursor_pager(api, parser, key, args.merge(cursor: res[:next_cursor])).next{ |nex|
|
||
res[key] + nex } end } end
|
||
def idlist2userlist(deferred)
|
||
deferred.next{ |ids|
|
||
promise = Deferred.new(true)
|
||
Thread.new{
|
||
begin
|
||
promise.call(Plugin::Twitter::User.findbyid(ids))
|
||
rescue Exception => e
|
||
promise.fail(e) end }
|
||
promise.next{ |users|
|
||
if(users.size != ids.size)
|
||
Deferred.when(*(ids - users.map{ |u| u[:id] }).each_slice(100).map{ |segment|
|
||
user_lookup(id: segment.join(',')).trap{ |e| warn e; [] } }).next{ |res|
|
||
res.inject(users){ |a, b| a + b } }
|
||
def idlist2userlist(deferred, cache: :keep)
|
||
deferred.next do |ids|
|
||
detected = {} # {id => User}
|
||
lookups = Set.new # [id]
|
||
ids.each do |id|
|
||
user = Plugin::Twitter::User.findbyid(id, Diva::DataSource::USE_LOCAL_ONLY)
|
||
if user.is_a? User
|
||
detected[id] = user
|
||
else
|
||
users end } } end
|
||
lookups << id
|
||
end
|
||
end
|
||
defer = lookups.each_slice(100).map{|lookup_chunk|
|
||
user_lookup(id: lookup_chunk.join(','), cache: cache).next{|users|
|
||
users.each do |user|
|
||
detected[user.id] = user
|
||
end
|
||
}
|
||
}
|
||
Delayer::Deferred.when(*defer).next do
|
||
ids.map{|id| detected[id] }
|
||
end
|
||
end
|
||
end
|
||
# upload.twitter.comに画像等をアップロードし、
|
||
# アップロードしたファイルのmedia_idを返す。
|