|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
#!/usr/bin/env lua5.1
-- This file:
-- http://angg.twu.net/fbcache/fbcache2.lua
-- http://angg.twu.net/fbcache/fbcache2.lua.html
-- (find-angg "fbcache/fbcache2.lua")
--
-- See: (find-angg "LUA/lua50init.lua" "loadfbcache2")
-- 1. Introduction
-- ================
-- It is easier to understand how this library works if we start with
-- a simple usage case. So, here it is (in the first person!)... Every
-- time that I see an interesting post on Facebook I copy its
-- permalink, which is a URL like this, but often much longer,
--
-- https://www.facebook.com/cezar.migliorin/posts/573841232680302
-- https://www.facebook.com/bruno.cava.7/posts/10204411927997424
--
-- to a file where I keep all these URLs. When I want to find a post
-- again, e.g., to mention it in a discussion, I search my "local
-- cache of interesting Facebook posts" for the right keywords, and I
-- get the text of the post and a URL to where it was originally
-- posted, like the ones above.
--
-- This library builds a "local cache of interesting Facebook posts".
--
--
-- 2. How it works
-- ===============
-- The graph below explains all the main operations.
--
-- browser_url
-- |
-- v
-- browser_url_parts --> fbkind
-- \ | (*)
-- v v
-- graph_query token
-- | \ |
-- | v v
-- | json
-- | |
-- | v
-- | json_table --> output_html
-- | ^ \-> output_txt
-- | |
-- v v
-- cache_fname <--> json_pp
-- «.requires» (to "requires")
-- «.curl» (to "curl")
-- «.token» (to "token")
-- «.json_parse» (to "json_parse")
-- «.fbpatcompile» (to "fbpatcompile")
-- «.fbpatcompile-tests» (to "fbpatcompile-tests")
-- «.NameIds» (to "NameIds")
-- «.NameIds-tests» (to "NameIds-tests")
-- «.Fbkind-class» (to "Fbkind-class")
-- «.Fbkinds-class» (to "Fbkinds-class")
-- «.fbkinds» (to "fbkinds")
-- «.fbkinds-tests» (to "fbkinds-tests")
-- «.sample-urls» (to "sample-urls")
-- «.user-id» (to "user-id")
-- «.user-id-test» (to "user-id-test")
-- «.gumbo» (to "gumbo")
-- «.command-line» (to "command-line")
-- _
-- _ __ ___ __ _ _ _(_)_ __ ___ ___
-- | '__/ _ \/ _` | | | | | '__/ _ \/ __|
-- | | | __/ (_| | |_| | | | | __/\__ \
-- |_| \___|\__, |\__,_|_|_| \___||___/
-- |_|
--
-- «requires» (to ".requires")
require "posix"
require "lpeg"
require "re"
userocks() -- (find-angg "LUA/lua50init.lua" "userocks")
pretty = require 'pl.pretty' -- (find-es "lua5" "pl.pretty")
pp0 = function (o) return pretty.write(o) end
pp = function (o) print(pretty.write(o)) end
-- (find-es "lua5" "pl.pretty-fix")
longquote = function (str)
local T = {}
local f = function (eqs) T[#eqs+1] = 1 end
if str:gsub("%](=*)", f) then
local eqs = string.rep("=", #T)
return '['..eqs..'[\n'..str..']'..eqs..']'
end
return '[[\n'..str..']]'
end
-- (find-es "lua5" "pl.text.wrap")
wrap = (require "pl.text").wrap
wraps = function (bigstr)
local f = function (li) return table.concat(wrap(li), "\n").."\n" end
return (bigstr:gsub("([^\n]+)", f))
end
-- (find-angg "LUA/lua50init.lua" "ee_ls")
no_dots = function (L)
for i=#L,1,-1 do if L[i]=="." or L[i]==".." then table.remove(L, i) end end
return L
end
ee_ls = function (dir) return (posix.dir(ee_expand(dir))) end
ee_ls_no_dots = function (dir) return sorted(no_dots(ee_ls(dir))) end
cfmt = function (fmt) return function (...) return format(fmt, ...) end end
ee_fmt = function (fmt) return cfmt(ee_expand(fmt)) end
-- _
-- ___ _ _ _ __| |
-- / __| | | | '__| |
-- | (__| |_| | | | |
-- \___|\__,_|_| |_|
--
-- «curl» (to ".curl")
fbcurl0 = function (url) return getoutput(format("curl -s '%s'", url)) end
fbcurl1 = function (query)
local c = query:match"%?" and "&" or "?"
local url = "https://graph.facebook.com/v2.5/" ..
query .. c .. "access_token=" .. token
local shorturl = "$GRAPH25/" .. query .. c .. "$ATOKEN"
return url, shorturl
end
fbcurl = function (query)
local url, shorturl = fbcurl1(query)
local cmd = format("curl -s '%s'", url)
print(shorturl) -- verbose behavior
return getoutput(cmd)
end
fbcurl0parse = function (url) return (json_parse(fbcurl0(url))) end
fbcurlparse = function (query) return (json_parse(fbcurl(query))) end
-- fbid_fetch_from_facebook = function (fbid) return fbcurl(fbid) end
-- «token» (to ".token")
-- (find-angg ".pythonrc.py")
-- https://developers.facebook.com/tools/explorer
token = "CAACEdEose0cBABpCSLpeWwpqgcNjZCGdt8x4VbunCQ9pdZBu1Jt9u4zfp2JVtcFPpPWLkVWjoSiSKwnZCZBTtRq2BY7gqy4RbsxC0ZCKiKUJg95owWR8DmRpZAjd1M8sbUtteoTWwqfsqjOpVaccwWbHhua8SFkR867gOQlDwigtn4spZCKeOs1KRZCrzQNhqLFNAhdT3m0wQgZDZD"
-- _
-- (_)___ ___ _ __ _ __ __ _ _ __ ___ ___
-- | / __|/ _ \| '_ \ | '_ \ / _` | '__/ __|/ _ \
-- | \__ \ (_) | | | | | |_) | (_| | | \__ \ __/
-- _/ |___/\___/|_| |_|____| .__/ \__,_|_| |___/\___|
-- |__/ |_____|_|
--
-- «json_parse» (to ".json_parse")
-- (find-fbcache "fbcache.lua" "json_parse")
-- http://www.json.org/
json_grammar0 = [=[
objrest <- obj {} [%s]* {.*}
obj <- bool / num / str / table / list
objp <- obj colon obj
table <- ("{" (objp (comma objp)*)* "}") -> totable
list <- ("[" (obj (comma obj )*)* "]") -> tolist
colon <- [%s]* ":" [%s]*
comma <- [%s]* "," [%s]*
bool <- ("true" / "false") -> tobool
num <- ("-"? [0-9.]+) -> tonum
str <- (ustr / str0)
ustr <- "u" str0
str0 <- ("'" (stritem / {'"'})* -> concat "'") /
('"' (stritem / {"'"})* -> concat '"')
stritem <- strcnormals / strcc / strcx / strcu / strcU / strcother
strcnormals <- {[^'"\]+}
strcc <- "\" {['"\/]}
strcx <- "\x" ({[%x][%x]} -> hextoc)
strcu <- "\u" ({[%x][%x][%x][%x]} -> utoc)
strcU <- "\U" ({[%x][%x][%x][%x][%x][%x][%x][%x]} -> Utoc)
strcother <- "\" . -> otherc
]=]
json_chars_b = {n="\n", r="\r", t="\t", b="\b", ["/"]="/"}
json_chars_u = {["2018"]='"', ["2019"]='"', ["201c"]='"', ["201d"]='"',
["2013"]="---", ["2022"]="*", }
json_chars_U = {}
json_defs = {
tobool = function (s) return s == "True" and true or false end,
tonum = function (s) return tonumber(s) end,
tostr = function (s) return s end,
tolist = function (...) return {...} end,
totable = function (...)
local L, T = {...}, {}
for i=1,#L-1,2 do T[L[i]] = L[i+1] end
return T
end,
hextoc = function (hh) return string.char(tonumber(hh, 16)) end,
utoc = function (h4)
local n = tonumber(h4, 16)
if n < 256 then return string.char(n) end
return json_chars_u[h4] or "\\u"..h4
end,
Utoc = function (h8) return "\\U"..h8 end,
concat = function (...) return table.concat {...} end,
otherc = function (c)
if json_chars_b[c] then return json_chars_b[c] end
print("\\"..c)
return "\\"..c
end,
}
json_grammar = re.compile(json_grammar0, json_defs)
json_parse = function (bigstr, pos) return json_grammar:match(bigstr, pos) end
json_test = function (bigstr, pos) pp(json_parse(bigstr, pos)) end
-- __ _ _
-- / _| |__ _ __ __ _| |_ ___
-- | |_| '_ \| '_ \ / _` | __/ __|
-- | _| |_) | |_) | (_| | |_\__ \
-- |_| |_.__/| .__/ \__,_|\__|___/
-- |_|
--
-- «fbpatcompile» (to ".fbpatcompile")
-- (find-es "lua-intro" "lpeg-quickref")
PatN = (lpeg.R("09")^1):C()
PatO = ((lpeg.R("09") + lpeg.S(" "))^1):C()
PatW = ((lpeg.R("09") + lpeg.R("AZ") + lpeg.R("az") + lpeg.S("."))^1):C()
PatR = (lpeg.P(1)^0):C()
PatR = lpeg.Cp():Cg("rpos") * (lpeg.P(1)^0):C()
fbpatcompile = function (pat, kindname, kindn)
pat = fbpatcompile0(pat)
local ppos = lpeg.Cp():Cg("bpos")
local pkind = lpeg.Cc(kindname):Cg("kind")
local pkindn = lpeg.Cc(kindn):Cg("kindn")
return (ppos * pat * pkind * pkindn):Ct()
end
fbpatcompile0 = function (pat) return expr(fbpatexpand(pat)) end
fbpatexpand = function (pat)
local mkp = function (s) return "Pat"..s end
local mks = function (s) return 'lpeg.P"'..s..'"' end
local mka = function (...) return table.concat({...}, " * ") end
local Upcase = lpeg.R("AZ")
local NonUpcase = (1 - Upcase)^1
local Parts = ((NonUpcase/mks) * (Upcase/mkp))^1
return lpeg.match(Parts/mka, pat)
end
-- «fbpatcompile-tests» (to ".fbpatcompile-tests")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "fbcache2.lua"
pat = "/events/N/permalink/N/R"
pate = fbpatexpand (pat)
patc0 = fbpatcompile0(pat)
patc = fbpatcompile (pat, "eventp")
uu = "https://www.facebook.com/events/1397247553878845/permalink/1412951502308450/"
u = "/events/1397247553878845/permalink/1412951502308450/"
= pate
--> lpeg.P"/events/" * PatN * lpeg.P"/permalink/" * PatN * lpeg.P"/" * PatR
= patc0:match(u)
--> 1397247553878845 1412951502308450
PP(patc:match(u))
--> {1="1397247553878845", 2="1412951502308450", 3="", "bpos"=1, "kind"="eventp", "rpos"=53}
patt = lpeg.P"https://www.facebook.com" * patc
PP(patt:match(uu))
--]]
-- _ _ ___ _
-- | \ | | __ _ _ __ ___ ___|_ _|__| |___
-- | \| |/ _` | '_ ` _ \ / _ \| |/ _` / __|
-- | |\ | (_| | | | | | | __/| | (_| \__ \
-- |_| \_|\__,_|_| |_| |_|\___|___\__,_|___/
--
-- «NameIds» (to ".NameIds")
-- (find-angg "LUA/lua50init.lua" "SetL")
NameIds = Class {
type = "NameIds",
new = function () return NameIds {setl=SetL.new()} end,
__tostring = function (ni) return ni:tostring() end,
__index = {
n = function (ni) return ni.setl:n() end,
add = function (ni, name, id) ni.setl:add(name, id); return ni end,
nameid = function (ni, name) return ni.setl:val(name) end,
tostring = function (ni)
local f = function (name) return format("%-30s %s", name, ni:nameid(name)) end
return mapconcat(f, ni.setl:ks(), "\n")
end,
--
readstring = function (ni, bigstr)
for _,line in ipairs(splitlines(bigstr)) do
local name,id = unpack(split(line))
if name and id then ni:add(name, id) end
end
return ni
end,
readfile = function (ni, fname)
return ni:readstring(ee_readfile(fname))
end
},
}
nameids = NameIds.new()
-- «NameIds-tests» (to ".NameIds-tests")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "fbcache2.lua"
nameids = NameIds.new():readstring [[
me 123
you 456
]]
= nameids
nameids = NameIds.new():readfile("nameids")
= nameids
= nameids.setl:n()
--]==]
-- _____ _ _ _ _ _
-- | ___| |__ | | _(_)_ __ __| | ___| | __ _ ___ ___
-- | |_ | '_ \| |/ / | '_ \ / _` | / __| |/ _` / __/ __|
-- | _| | |_) | <| | | | | (_| | | (__| | (_| \__ \__ \
-- |_| |_.__/|_|\_\_|_| |_|\__,_| \___|_|\__,_|___/___/
--
-- «Fbkind-class» (to ".Fbkind-class")
Fbkind = Class {
type = "Fbkind",
new = function (kindn, kindname, pat, comment)
local patc = fbpatcompile(pat, kindname, kindn)
local fbk = Fbkind {kindn=kindn, kindname=kindname,
pat=pat, patc=patc, comment=comment}
return fbk
end,
fromline = function (kindn, line)
local spl = split(line)
return Fbkind(kindn, spl[1], spl[2], spl[3])
end,
__tostring = function (fbk) return fbk:tostring() end,
__index = {
tostring = function (fbk)
return format("%2s %-12s %-40s %s",
fbk.kindn, fbk.kindname, fbk.pat, fbk.comment)
end
},
}
-- _____ _ _ _ _ _
-- | ___| |__ | | _(_)_ __ __| |___ ___| | __ _ ___ ___
-- | |_ | '_ \| |/ / | '_ \ / _` / __|_____ / __| |/ _` / __/ __|
-- | _| | |_) | <| | | | | (_| \__ \_____| (__| | (_| \__ \__ \
-- |_| |_.__/|_|\_\_|_| |_|\__,_|___/ \___|_|\__,_|___/___/
--
-- «Fbkinds-class» (to ".Fbkinds-class")
Fbkinds = Class {
type = "Fbkinds",
new = function () return Fbkinds {} end,
from = function (bigstr) return Fbkinds.new():addlines(bigstr) end,
__tostring = function (fbks) return fbks:tostring() end,
__index = {
add = function (fbks, kindname, pat, comment)
local kindn = #fbks + 1
local fbk = Fbkind.new(kindn, kindname, pat, comment)
fbks[kindn] = fbk
fbks[kindname] = fbk
fbks.pat = fbks:makepat()
end,
addline = function (fbks, line)
local spl = split(line)
fbks:add(spl[1], spl[2], spl[3])
return fbks
end,
addlines = function (fbks, bigstr)
for _,line in ipairs(splitlines(bigstr)) do fbks:addline(line) end
return fbks
end,
--
makepat0 = function (fbks)
local pat = fbks[1].patc
for i=2,#fbks do pat = pat + fbks[i].patc end
return pat
end,
makepat = function (fbks)
return lpeg.P"https://www.facebook.com" * fbks:makepat0()
end,
--
match = function (fbks, url)
return fbks.pat:match(url)
end,
tostring = function (fbks)
local f = function (i) return fbks[i]:tostring() end
return mapconcat(f, seq(1, #fbks), "\n")
end,
},
}
-- __ _ _ _ _
-- / _| |__ | | _(_)_ __ __| |___
-- | |_| '_ \| |/ / | '_ \ / _` / __|
-- | _| |_) | <| | | | | (_| \__ \
-- |_| |_.__/|_|\_\_|_| |_|\__,_|___/
--
-- «fbkinds» (to ".fbkinds")
-- (find-fbcache "fbcache.lua" "fbkinds")
fbkinds_bigstr = [[
eventnpn /events/N/permalink/N/R 21_ok
eventnn /events/N/N/R 21_ok
eventn /events/N/R 1_ok
groupnpn /groups/N/permalink/N/R 21_ok
groupwpn /groups/W/permalink/N/R 0_nothingworks
groupnn /groups/N/NR 1_whydoesnt2work
groupwn /groups/W/NR 2_ok
groupn /groups/NR 1_ok
groupw /groups/WR 0_how_to_convert_name->id?
mediawannn /W/media_set?set=a.N.N.NR 0_nothingworks
mediawnnn /media/set/?set=W.N.N.NR 0_nothingworks
mediawn /media/set/?set=W.NR 0_nothingworks
noteswwn /notes/W/W/NR 0_3shouldworkbutdeprecated
notesn /notes/N/R 0_1shouldworkbutdeprecated
pageswn /pages/W/NR 2_ok
storynn /permalink.php?story_fbid=N&id=NR 12_ok
photonn /photo.php?fbid=N&set=t.NR 0_nothingworks
photonnnn /photo.php?fbid=N&set=a.N.N.NR 0_nothingworks
photono /photo.php?fbid=N&set=OR 1
photot /N/photos/t.N/N/R 13
photogm /N/photos/gm.N/N/R 123
photona /N/photos/a.N.N.N/N/R 1245
photowa /W/photos/a.N.N.N/N/R 0_untested
photovs /photo.php?v=N&set=OR 1
photov /photo.php?v=NR 1
postwn /W/posts/NR 2
videon /video.php?v=NR 1
]]
fbkinds = Fbkinds.from(fbkinds_bigstr)
fbkinds_in_file = function (fname) return fbkinds_in_string(ee_readfile(fname)) end
fbkinds_in_string = function (bigstr)
return cow(function ()
for _,url in ipairs(split(bigstr)) do
local fbk = fbkinds:match(url)
if fbk then coy(fbk, url) end
end
end)
end
allfbks = function () return fbkinds_in_file("~/fbcache/all-fb-urls.lst") end
allfbksk = function (kind)
return cow(function ()
for fbk,url in allfbks() do
if fbk.kind == kind then coy(fbk, url) end
end
end)
end
-- «fbkinds-tests» (to ".fbkinds-tests")
--[[
-- (find-lpegw3m "lpeg.html#f-match")
-- (find-es "lua5" "lpeg-quickref")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "fbcache2.lua"
= fbkinds
PP(keys(fbkinds))
PP(fbkinds[1])
pat0 = "/events/N/permalink/N/R"
uu = "https://www.facebook.com/events/1397247553878845/permalink/1412951502308450/"
u = "/events/1397247553878845/permalink/1412951502308450/"
PP(fbkinds[1].patc:match(u))
PP(fbkinds:makepat0():match(u))
PP(fbkinds:match(uu))
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "fbcache2.lua"
bigstr = ee_readfile "~/fbcache/all-fb-urls.lst"
for _,url in ipairs(split(bigstr)) do
local p = fbkinds:match(url)
if p then print(p.kind, url) else print("???", url) end
end
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "fbcache2.lua"
for fbk in fbkinds_in_file("~/fbcache/all-fb-urls.lst") do
if fbk.kind:match("^group") then print(fbk[1]) end
end
for fbk in fbkinds_in_file("~/TODO") do
if fbk.kind:match("^group") then print(fbk[1]) end
end
--]]
-- ____ _ _ _ ____ _
-- / ___| __ _ _ __ ___ _ __ | | ___ | | | | _ \| | ___
-- \___ \ / _` | '_ ` _ \| '_ \| |/ _ \ | | | | |_) | | / __|
-- ___) | (_| | | | | | | |_) | | __/ | |_| | _ <| |___\__ \
-- |____/ \__,_|_| |_| |_| .__/|_|\___| \___/|_| \_\_____|___/
-- |_|
--
-- «sample-urls» (to ".sample-urls")
fbkinds_sample_urls_bigstr = [[
eventnpn https://www.facebook.com/events/1397247553878845/permalink/1412951502308450/
]]
-- _ _ ___ ____
-- | | | |___ ___ _ __ |_ _| _ \ ___
-- | | | / __|/ _ \ '__| | || | | / __|
-- | |_| \__ \ __/ | | || |_| \__ \
-- \___/|___/\___|_| |___|____/|___/
--
-- A hack to convert usernames to userids using wget and grep.
-- It doesn't always work.
-- See: (find-es "facebook" "fb-user-id")
-- «user-id» (to ".user-id")
fbwget0 = function (url)
return 'cd /tmp/fb/ && wget -nc -U "$MOZILLA_USER_AGENT" "'..url..'"'
end
fbwget1 = function (url)
getoutput("mkdir -p /tmp/fb/")
print(getoutput(fbwget0(url)))
end
fbwget2 = function (page) fbwget1("https://www.facebook.com/"..page) end
fbwget3 = function (page)
return "cat /tmp/fb/"..page.." 2>&1 | tr ' \"' '\\n\\n' | grep fb://profile/"
end
fbwget4 = function (page) return getoutput(fbwget3(page)) end
fbwget5 = function (str) return str:match("fb://profile/(%d+)") end
fbwget6 = function (page) return fbwget5(fbwget4(page)) end
getuseridls = function () return ee_ls_no_dots("/tmp/fb/") end
getuserid0 = function (user) fbwget2(user) end
getuserid1 = function (user) return fbwget6(user) end
-- «user-id-test» (to ".user-id-test")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "fbcache2.lua"
user = "thadeu.penna"
= fbwget0(user)
= fbwget3(user)
= getoutput("rm -v /tmp/fb/"..user)
= fbwget2(user)
= fbwget6(user)
--> 1419700496
id = fbwget6(user)
o = fbcurlparse(id)
pp(o)
--> { name = "Thadeu Penna", id = "1419700496" }
--]]
-- _
-- __ _ _ _ _ __ ___ | |__ ___
-- / _` | | | | '_ ` _ \| '_ \ / _ \
-- | (_| | |_| | | | | | | |_) | (_) |
-- \__, |\__,_|_| |_| |_|_.__/ \___/
-- |___/
--
-- «gumbo» (to ".gumbo")
geturltitle = function (url)
gumbo = require "gumbo"
local bigstr = getoutput(format("curl -s '%s'", url))
local document = gumbo.parse(bigstr)
local title = document.title
return title
end
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "fbcache2.lua"
url = "http://www.brasildefato.com.br/node/33509"
= geturltitle(url)
--]]
-- _ _ _
-- ___ ___ _ __ ___ _ __ ___ __ _ _ __ __| | | (_)_ __ ___
-- / __/ _ \| '_ ` _ \| '_ ` _ \ / _` | '_ \ / _` | | | | '_ \ / _ \
-- | (_| (_) | | | | | | | | | | | (_| | | | | (_| | | | | | | | __/
-- \___\___/|_| |_| |_|_| |_| |_|\__,_|_| |_|\__,_| |_|_|_| |_|\___|
--
-- «command-line» (to ".command-line")
-- Process command-line arguments, to run this as a script
local a,b = ...
-- PP(a, b)
if a then
if a == "-fbcurl" then pp(fbcurlparse(b))
elseif a == "-urlsofkind" then for fbk,url in allfbksk(b) do print(url) end
elseif a == "-urltitle" then print(geturltitle(b))
else print("Unrecognized command")
end
end
-- (find-sh "~/fbcache/fbcache2.lua -fbcurl 1412951502308450")
-- (find-fbcurl "1412951502308450")
--[[
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
~/fbcache/fbcache2.lua -urlsofkind photonn
~/fbcache/fbcache2.lua -urltitle http://www.brasildefato.com.br/node/33509
--]]
-- _____ _
-- | ____| |_ ___
-- | _| | __/ __|
-- | |___| || (__
-- |_____|\__\___|
--
--[[
-- (find-lpegw3m "lpeg.html#f-match")
-- (find-es "lua5" "lpeg-quickref")
-- Prepare a table of "name->id"s and save it to a file.
-- Experimental, incomplete, etc.
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "fbcache2.lua"
bigstr = ee_readfile "~/fbcache/all-fb-urls.lst"
s = SetL.new()
for _,url in ipairs(split(bigstr)) do
local p = fbkinds:match(url)
if p and p.kind == "postwn" then PP(p[1]) end
if p and p.kind == "postwn" then s:add(p[1], "") end
end
= s
nameids = NameIds.new():readfile("nameids")
= nameids.setl:n()
= s - nameids.setl
for name in (s - nameids.setl):gen() do fbwget1(name) end
for _,name in ipairs(ee_ls_no_dots("/tmp/fb/")) do print(name, fbwget5(name)) end
= nameids.setl:n()
for _,name in ipairs(ee_ls_no_dots("/tmp/fb/")) do
local id = fbwget5(name)
if id then print(name, id) end
if id then nameids:add(name, id) end
end
= nameids.setl:n()
= nameids
for name,p in s:gen() do
PP(name, p)
end
for name,p in s:gen() do
if not p.id then
local o = fbcurlparse(name)
if o and o.id then p.id = o.id end
PP(p)
end
end
for name,p in s:gen() do
if not p.id then PP(p) end
end
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
-- (find-fline "/tmp/fb/")
-- (find-sh "rm -Rv /tmp/fb/")
getoutput("mkdir /tmp/fb/")
= getoutput('cd /tmp/fb/ && wget -U "$MOZILLA_USER_AGENT" https://www.facebook.com/thadeu.penna')
fbwget0 = function (url)
getoutput("mkdir /tmp/fb/")
print(getoutput('cd /tmp/fb/ && wget -U "$MOZILLA_USER_AGENT" "'..url..'"')
end
fbwget = function (page) fbwget0("https://www.facebook.com/"..page) end
-- https://www.facebook.com/thadeu.penna
-- https://www.facebook.com/CopBlock
-- http://stackoverflow.com/questions/30886468/facebook-cannot-query-users-by-their-username-solution
name = "thadeu.penna"
o = fbcurlparse(name)
PP(o)
for name,p in s:gen() do
if p.id then printf("%-30s %s\n", p.name, p.id) end
end
--]]
-- Local Variables:
-- coding: raw-text-unix
-- End: