eniehackとの議論11
- Twitter proxy
- 通話にて
DSL
# DSLのイメージ (メソッド名は適当)
filter "@some_bizarre_otakuをミュート" do |post| # titleはuserscriptっぽくスクリプトの外側で記述させてもいいか
return false if post.author.username == "@some_bizzare_otaku"
post
end
# 別の行、あるいは別のフィルターとして…
filter "「調査」と入っている投票ツイートをミュート(Twitterで世論調査をするな)" do |post|
FILTER_WORDS = ["調査", "世論", ...]
return false if (
FILTER_WORDS.any? {|w| post.text.include? w }
&& post.polls != nil
)
post
end
filter "ITF.をUTに置き換える(University of Tsukubaなので)" do |post|
new_post = post.clone
new_post.text = post.text.replace(/ITF\./, "UT")
new_post
end
filter "pixivの画像にはCWをつける" do |post|
new_post = post.clone
if post.images.any? { |i| i.url.include? "pixiv.net" }
new_post.cw = "NSFW"
end
new_post
end
// DSLのイメージ(Lua)
TODO
プロトコル
// パスするだけ(リクエスト)
{
"jsonrpc": "2.0",
"method": "binchotan.v0.plain_request", // pass through, proxy
"params": {
"method": "GET",
"endpoint": "/lists/tweets",
"api_params": {
...
}
},
"id": "hogehoge" // arbitrary string
}
// フィルタリング付きのエンドポイント(リクエスト)
{
"jsonrpc": "2.0",
"method": "binchotan.v0.reverse_chronological",
"params": {
"max_results": 1024,
},
"id": "hogehoge"
}
// フィルタリング付きのエンドポイント(リクエスト)
{
"jsonrpc": "2.0",
"method": "binchotan.v0.backend_info",
"params": {
},
"id": "hogehoge"
}
// レスポンス
{
"jsonrpc": "2.0",
"result": {
"meta": {
"api_calls_remaining": 24,
"api_calls_reset": 18,
},
"body": { // copy of Twitter API response
"data": {
...
},
"meta": {
...
}
}
},
"id": "hogehoge"
}
Backlinks
eniehackとの議論10
[[Twitter proxy]] フィルタ そういう選択をすることに自覚的であって、docsにもちゃんと書くなら良いと思う セキュリティに関しては妥協するか否かを選択できるようにしたいという認識……? 「フィルタつけたらいいじゃ〜ん eval(open('filter.lua'))!w」というのはダメだよねと思っていて、eval的なものを使うのであればできるだけ対策して、利用者にも「このプログラム上では任意のコードが動いちゃうし、sandboxも完璧ではないから気をつけてね」と警告したかった インフォームド・コンセント 知ってればコンテナに入れたり、権限を絞ったユーザで実行したり、多重防御に手間をかけてくれるだろうという期待 妥協してbinchotanを使うか、妥協せずbinchotanを使わないかという選択ともいえる...