有人能帮我理解这段关于twitter api和ruby的代码吗?这是一种基于twitter句柄检索所有关注者的方法



CSV到底做什么?(我知道这是一颗宝石(

什么是SLICE_SIZE?(13号线(

为什么csv内部是直括号?(第16行(CSV do|CSV|

你能解释一下第17、18、19行吗?我完全迷失了方向?

-----------------代码----------------------------------------------------

    require 'twitter'
    require 'csv'
    def twitter_client
       @twitter_client ||= Twitter::REST::Client.new do |config|
            config.consumer_key = ""
            config.consumer_secret = ""
            config.access_token = ""
            config.access_token_secret = ""
       end
   end
   SLICE_SIZE = 100
   def fetch_all_friends(twitter_username)
       CSV do|csv|
           twitter_client.follower_ids(twitter_username).each_slice
           (SLICE_SIZE).with_index do |slice, i| 
                 twitter_client.users(slice).each_with_index do |f, j|
                       csv << [i * SLICE_SIZE + j + 1, f.name,
                       f.screen_name]
                 end
           end
       end
   end

CSV是一个类,实现CSV数据的处理,如下所示。

each_sliceEnumerable的一种方法,每次迭代只从源集合中获取这么多元素。这样做是为了减少计算的内存需求,或者,例如,可能是为了延迟获取更多数据,直到处理完当前块。SLICE_SIZE值是要获取的元素数。

CSV do |csv|初始化csv对象并将其作为参数向下传递给块。这是一种组织代码的方式,例如初始化与块的业务逻辑是分开的。该块由doend关键字分隔。

接下来的两行实际上是一个单独的语句:

twitter_client.follower_ids(twitter_username).each_slice(SLICE_SIZE).with_index do |slice, i|

它从Twitter API获取twitter_username的追随者id的集合,从中获取SLICE_SIZE块中的元素,并将每个块及其索引传递到另一个块中。该块的内容被执行的次数与CCD_ 11中的CCD_。

下一行

twitter_client.users(slice).each_with_index do |f, j|

仅适用于当前chunk的元素。它获取块中的每个元素,并将其与块中的索引一起传递给另一个块。

到目前为止,它更多的是收集处理,而不是实际的业务逻辑。

最内在的陈述

csv << [i * SLICE_SIZE + j + 1, f.name, f.screen_name]

创建一个由三个字段组成的数组:某种索引、Twitter提供的namescreen_name。此数组表示CSV行。<<操作符将该数组推送到前面提到的csv对象中。csv对象将其添加到此时已收集的内容中。

当这个代码完成时,您将有一个csv对象,其中包含从Twitterneneneba API接收的数据,并准备保存到磁盘。

过去有一个gem faster_csv需要调用,但现在不再需要了。您只需要CSV库。

它通常用于读取或创建CSV文件。

当没有行号时,回答你的问题有点困难。您可以在以下位置了解有关Ruby CSV库的更多信息:http://ruby-doc.org/stdlib-2.2.2/libdoc/csv/rdoc/CSV.html

相关内容

最新更新