politwoops.tw 進度規劃現況
這是 watchOut x g0v summer code project.
後端 fork from https://github.com/sunlightlabs/politwoops-tweet-collector
前端 fork from https://github.com/sunlightlabs/politwoops
後端是主要進度。
github repo: feepy、twpolitwoops-collector
預計進度
- 把 politwoops.tw 整個架起來
- 建後端的 collector
- 做資料測試
- 修 mockup and web 介面
進度現況
The 2nd part.
- 做個簡單的 web 介面 to show data.
- 實做 screenshot-worker 功能
- 建前端 ( politwoops’ rails )
- additional:
不部會的新聞稿 RSS collector.
待解 issues:
**改記錄在github上。
(以下廢棄-_-)
- Client
- FB access_token expire
- 增加其他政治人物資料(eg. 市長) in 市長候選人
- streaming.py 的 access exception handle. ( set retry )
- access_token extend, should rewrite into .ini
- retry time should be slowly
- Checker
- check feed should separate by time.
- deleted_feeds 有少...(可能是cursor.execute太快 lol...)
- Database
- tables redesign
- feeds
- deleted_feeds
- politicians
- normal_users: id(PK, auto), user_name, facebook_id, ignored
- tmp_feeds:id(PK, feed’s id), user_id, user_name, content, created, modified, feed, feed_type
- parties:id(PK, auto), name, created_at, updated_at, display_name
- offices:id(PK, auto), title, abbreviation
- pages:id(PK, auto), title, slug, content, created_at, updated_at, language
- statistics: id(PK, auto), what, when, amount, created_at, updated_at
- account_links:id(PK, auto), politician_id, link_id, created_at, updated_at
- account_types:id(PK, auto), name
- schema_migrations:version
- users
- tweet_images:id(PK, auto), url, tweet_id, created_at, updated_at
- deleted_tweets:id, user_name, content, deleted, created, modified, tweet, politician_id, approved, reviewed, reviewed_at, review_message, retweeted_id, retweeted_content, retweeted_user_name
- SQL table fields
- politicians
- tweets → feeds
deleted_tweets → deleted_feeds
edited_feeds
- normal_users
- tmp_feeds
- deleted feed
stream checker
edited feed stream
---
comments: order by desc.
- 不確定啥用的tables: users, account_links, offices, pages, statistics
- parties應該是政黨(party)的資料,tweet_images 是圖檔的儲存資料,schema_migrations 應該是tables versions(?
- feed be deleted 的驗證蠻卡的... 一般的 like post, comment post 沒辦法從 api 取得,
- 和實際被刪除的 feed 一樣會被 api return error.
- edited_feeds 需新增(但大量更新感覺資料會非常多...囧
- edited_feeds 改存在 feeds 的 feed_edited column.
- edited_feed stream 和 deleted feed stream, -worker 併在一起了。
- feed_edited 的做法寫在 talks #2.
-
- normal_users:
- 存一些 " found user id not in politicians " 的「一般人」或是原本取得的 politician uid 是錯的,也會先丟進這裡。had a column: ignored (被確認為一般人)
- tmp_feeds:
- 1. normal_users’ feed but not be ignore.
- 2. deleted_feeds 的暫存
- 3. 其他(總之先暫存=_=
- feeds_checker:
- 目前的 idea 是每 3~5 mins 從 feeds 裡面用 id 一個一個讀(避免用 feed stream 有可能會漏掉的問題
- 但有個問題是「讀不到不見得被刪掉」=_=
=========分水嶺==========
- 把 politwoops 整個架起來(後端) #1
- 建後端的 collector //screenshot-worker 先 pass 了, so finished at week: 7/13~
- 把 collector 主要在跑的三支 .py 看懂
- tweets-client.py
- 主要進入點在 Line:158,跑兩個thread當heartbeat用(一個避免當掉),在stream_forever 裡會跑 tweepy 的 stream listener ( L:150&151)
- 核心的結構應該算是 L:60 的 class ,把 tweepy 讀到的資料 put 進 beanstalkc ,然後 alert 。 (接下來就沒它的事了XD)
- politwoops-worker.py
- 主要進入點在 Line:105,監測 beanstalk 有沒有 job ( put from tweets-client ),再做處理(L:121)。
- Write a api like tweepy’s on_data() //finish at week: 7/20~
- GraphAPI可以讀到:
- 自己的 wall post 出現的內容
- 讀自己的 wall post 比較近似 tweepy 的 streamListener
- 特定使用者(by id)的 feeds
- 粉絲頁的 id 可以從 data-uid 取得,但 user 的 data-id 卻不見得能夠被 api 讀取( 從chrome-> F12-> data-id )
- API 的選擇(既然要做得像 tweepy 就叫 feepy 了(X))
- write like tweepy streamListener
- 只負責讀自己的home feeds (這樣得開一個新的帳號去 follow & like politicians )
- 好處是如果被 politicians add friend 的話可以爬到 friend 級的 feed (沒被限制的話
- 壞處是 feeds 的排序...一般在看的時候可以選 top stories / most recent ,從 fb-sdk 抓下來的 data 不知道是怎麼排的。(而且資料一多的話 listener 有可能漏掉
- a politician have a listener
- 個別監聽(?)比較不會有漏訊息的問題,但 deleted feed 似乎還是無解...目前想到的做法是用 feed url 是不是導向 404 的方式去抓(但感覺頗有點難QAQ)
- uid 不易取得。而且有些 user 就算抓到了 uid ,feeds 的資料還是空的...(不知道是不是版本的問題)
- 目前的 usage:
- import facebook & streaming #還沒寫成module檔所以...XD
- token = ’(your access_token)’
- listener = streaming.StreamListener() #politwoops 在 listener 的部份是 overriding
- stream = streaming.Stream( token, listener)
- stream.filter() #and it get run.
備註 & 討論
- tweepy github
- https://developers.facebook.com/docs/public_feed
- FB api 可以用 since, until (Unix timestamp格式)去抓時間區間的feeds,但這只限於created_time。
API差異
- twitter
- 沒有 edit 功能
- API有提供轉推(retweet)的資訊
- all feed keys: id, from, actions, type, privacy, created_time, updated_time, status_type, shares, likes, comments, picture, message, link, application, name, properties, object_id, place, caption, description, story, icon, source
- must have’s feed keys: id, from, actions, type, privacy, created_time, updated_time
- type = [’status’, ’link’, ’video’, ’photo’]
- status_type = [’mobile_status_update’, ’created_note’, ’added_photos’, ’added_video’, ’shared_story’, ’created_group’, ’created_event’, ’wall_post’, ’app_created_story’, ’published_story’, ’tagged_in_photo’, ’approved_friend’]
talks
#1
#2