almost 7 years ago
上禮拜辦了一個活動,完全用 facebook 的活動 (event)功能邀請賓客;活動前一天我想要印出賓客清單,才發現 facebook 居然沒有把賓客名單匯出成 .csv 的功能..... 我記得以前有啊?
這種時候就只好動用 facebook 強大的 opengraph API了。opengraph 的 EDGE 除了可以是一個人,一個fan page之外,也可以是一個活動。
取得 event 相關資訊前,要在申請 access token 前額外要求要 event 的權限:
話不多說,來看 code:
# encoding=utf-8
require 'open-uri'
require 'json'
event_id = '1609895432567499'
token = STDIN.read
url = 'https://graph.facebook.com/v2.3/' \
+ event_id + '/attending/?limit=250'
url = url + '&access_token=' + token
json = open(url)
data_hash = JSON.parse(json.read)
data_hash["data"].each do |datum|
puts datum["name"]
end
執行
ruby list_attendees.rb < token > guests.csv
即可
其中 < token
是利用 standard input 將我放在另一個檔案的 token 吃進來; > guests.csv
就是把列印出來的內容存到csv檔裡面。
同場加映
almost 7 years ago
繼上一篇印出 facebook 活動賓客名單,同場加映一下,這次我們把 EDGE 由活動換成社團,印出全部社團成員,並且隨機排列,給他們一個亂數編號。
原先我的想法是按照賓客的長度創照一個連續自然數陣列,再利用 ruby 內建的 shuffle
洗牌,但是這樣名單印出來就是亂的。例如:
nums = 1..16
nums = nums.to_a.shuffle
後來想到一個更簡單的做法,就是直接把成員名單的順序打亂就好。實作如下:
# encoding=utf-8
require 'open-uri'
require 'json'
group_id = '67226335296474'
token = STDIN.read
url = 'https://graph.facebook.com/v2.3/' \
+ group_id + '/members/?fields=name&limit=250'
url = url + '&access_token=' + token
json = open(url)
data_hash = JSON.parse(json.read)
nums = 1..data_hash["data"].size
data = data_hash["data"].shuffle
for t in nums
datum = data[t-1]
puts t.to_s + "\t" + datum["name"]
end
執行
ruby get_members.rb < token
其中 token
放有你的 access token。
如此就會印出洗牌過的成員名單,並加上一個照順序印出的編號了。