@习猪习
@习猪习
抵抗者运动
关注的小组(5)
动态 帖子 8 评论 106 短评 0 收到的赞 200 送出的赞 60
  1. 习猪习 抵抗者运动
    习猪习   在小组 2047 发表文章

    【RFA】外賣騎手組織創辦人維權被捕 平台騎手釀全國大罷工

    原文链接:https://www.rfa.org/cantonese/news/strike-03042021045718.html

    大陸送外賣人員組織「外送騎手聯盟」的創立人熊焰懷疑因維權被捕後,業界掀起一片抗議聲音。被傳涉事的外送平台「餓了麼」旗下騎手近日消極怠工,知情人士消息指,有「餓了麼」騎手號召在下周一(3月8日)發起全國性大罷工行動。有關工運訊息遭官方封殺。(黃小山/程文 報道)

    「外送騎手聯盟」創辦人熊焰懷疑在網上批評外送平台「餓了麼」欺壓騎手,上月底在北京被捕後,至今仍下落不明。

    多個消息源透露,從本月初開始,「餓了麼」點餐平台就出現異常,大量騎手拒絕接單,以至大量訂單因超時而作廢。

    關注事件的人士洪濤指出,周三(3月3日)已越來越多騎手加入怠工,但目前資訊被嚴厲封鎖,具體的怠工規模還未掌握。

    洪濤說:應該就是昨天吧,還是北京。知道有這個事,具體的不好說。看到他們發了一個文章,那個文章上應該是有所披露吧。現在能瞭解到的也就是那個內容。

    另有消息顯示,各地騎手正發起一場怠工行動,抗議平台方剋扣騎手的報酬,以及對警方抓捕熊焰表示不滿。

    知情人士張先生向本台透露,「餓了麼」的騎手已討論在下周一開始進行全國性大罷工,抗議平台方對騎手的欺壓行為,同時也聲援騎手維權組織者熊焰。但目前為止,因為資訊被管控,還不清楚會有多少外送騎手響應。

    張先生說:是他們騎手的一些群,然後提到了說,3月8號的時候要去全部罷(工)。但是這個不會影響到全部的這個派送員群體,它應該是有一個他們自己圈子裡邊他們有這麼一個想法。一個是因從過年以來,「餓了麼」那一系列操作,然後到外送聯盟盟主被帶走,很多人這個情緒會比較激烈現在。微博上和那麼公眾號一直都有消息發出來,但是一般都呆不了多長時間,發出來之後,很快就會被清掉了。

    張先生還指出,在大陸,包括「餓了麼」在內的外賣平台,一邊以嚴苛的方式管控外送騎手,同時又不願意承擔雇主的責任,導致目前外送騎手的處境惡劣。不過,由於騎手們相對鬆散的組織狀態,也讓他們從日常維權以至這次罷工行動的協調都困難重重。

    張先生說:外送員就是一個零散用工的吧,其實它很多的員工也沒有跟「餓了麼」直接簽合同,雖然都穿著「餓了麼」的衣服,但實際上它不屬於「餓了麼」的員工。它是通過一種外包的形式,分散到各種勞務派遣啊那種公司去招的員工。實際上這個群體比較辛苦,比如工作時長比較長,然後,經常會被平台以各種理由剋扣收入,但是這個群體數量還是很多的,但一般人也都沒有想把這個東西做太長,很多人把這個當成一個過渡性的職業。

    北京快遞騎手何先生則在微信朋友圈透露,目前十多個群裡有近萬名外送員,只要一半的人加入怠工和罷工,都會影響「餓了麼」的運作。他自己亦已退出了「餓了麼」,轉投往另一外送平台服務,抗議「餓了麼」在熊焰被捕後還落井下石。

    本台記者多次致電「餓了麼」外送平台上海總部,但多部電話都無人接聽。迄今為止,還未聞有官方介入今次罷工危機。

    專責送餐服務的「外送騎士聯盟」成立不到一年,組織者熊焰及其多名好友,上周四(2月25日)被北京警方抓捕,但警方未有透露原因。消息指他曾在網上揭露外送騎手遭平台欺壓。有工運人士認為,數量龐大的外賣騎手組織維權引起官方不安,透過抓捕組織者嚴打民間維權團體。

  2. 习猪习 抵抗者运动
    习猪习   在小组 2047 发表文章

    【美国之音】记录当代中国文字狱,为“墙国”不再有因言获罪那一天

    原文:https://www.voachinese.com/a/conversation-with-a-young-chinese-free-speech-activist02162021/5779420.html

    网络世界中,他是中文推特圈颇有影响力的“中国文字狱事件盘点”账号的推主。

    “身边没有一个人知道我关心政治,”他说,“我必须得保证自己的人身安全。”

    出于安全考虑,他只透露自己姓王,90后,生活在“墙国”,给自己的定位是“倡导言论自由的活动人士。

    相比很多中文界的推特大V,小王上推的时间不长。2019年10月,中国共产党庆祝执政70周年之际,他开通了“中国文字狱事件盘点”,用中英双语记录近年来中国因言获罪的案例。通过政府网站、法院判决书、官媒报道、警方社交媒体账号等公开信息来源,建成了一个从2013年至今有近2000个因言获罪案例的数据库。他说,这些都是冰山一角。

    说起设立推特账号的契机,小王告诉美国之音,中国在举行大型阅兵式庆祝建国70周年的时间点上抓了很多所谓“辱国人士”。一些人仅仅因为在网上说了几句官方不喜欢的话就被抓走。让他觉得最为两个荒谬的案例,一是一位四川网民说:“阅兵有什么好看的”,二是一位山东网民说:“祖国没有养你,是你妈养的你。” 二人双双被拘留。

    “那个时候我才意识到,这个国家对言论的打压可能又上升到一个新的层面了。虽然我们都知道这样的事件一直存在,但是那一系列案例报道出来,我才感觉到细思极恐,” 小王说。

    在他记录的案例里,有一些被媒体广泛报道的知名人物,比如曾暗示习近平是“剥光了衣服也要坚持当皇帝的小丑”被重判18年的地产大亨任志强;接连发表批评当局文章被革职的前清华大学教授许章润;声援多位良心犯被起诉“非法经营罪”的出版界“侠女”耿潇男;抨击共产党是“政治僵尸”被开除党籍的前中共党校教授蔡霞;报道武汉疫情被判刑的公民记者张展 ……

    但更多的是些籍籍无名,鲜有人关注的小人物,有些连名字也没有留下。比如,山东青岛因在微信群“辱骂村干部”被拘留7天的吴某;宁夏银川因在贴吧抨击交警被拘留5天的李某;河南嵩县因在推特发布、转发“疫情涉政虚假信息”被判有期徒刑6个月的姚某。在这近2000位当代文字狱受害者中,甚至还有未成年人。

    江苏徐州45岁的前央企员工黄根宝是被小王“立此存照”的文字狱受害者之一。在官方的判决书里,他因在推特上“辱骂国家领导人”和散布“损害国家形象和危害国家利益的虚假信息”被判处1年4个月有期徒刑。

    “(2019年)5月31日早上,大概9点左右的时候,他们通过单位的人把我喊到会议室,我也没有什么准备,手机也被他们拿走了,”黄根宝告诉美国之音,“我也没想到这次他会动真格的。”

    刑满释放的黄根宝开通了新的推特账号(原先的账号已经被他人控制),继续发声。他坚称自己无罪,并正式向徐州市中级人民法院提出重新审理的申诉。

    “我们是人,怎么能任由他们像猪一样圈养,”他写道。

    “我认为这些人不应该被遗忘,” “中国文字狱事件盘点”的推主小王对美国之音说,“很多案例放在其他国家都会是头条新闻,但是在中国,它只是一个数字,只是简单的千分之一、万分之一。这个群体太庞大了,我希望尽我可能,让世界知道他们。”

    就在小王上推的同一时间,中国外交部和一众外交官也纷纷设立推特账号。 尽管推特被中国政府屏蔽,但官方显然意识到占领这一平台的重要性。

    那时小王经常到外交部的推特上留言,发布自己整理的因言获罪的案例。一个星期后,他被对方拉黑了。

    去年,中国外交部公开表示:“在中国,任何人不可能因为仅仅发表言论就受到处罚或者刑罚……极少数人出于不可告人的目的,造谣称他们在中国‘因言获罪’,经不起事实推敲。”

    “那么请问,这个经得起推敲不?”小王再次发布了满满一页因为说话被警告、拘留、甚至判刑的受害者名单。

    他对美国之音说:“一定要让世界知道中共对言论的打压,对人权的迫害是系统性的,并不是几个简单的案例。”

    很多推友对小王说谢谢,感谢他让被遗忘的人群为人们铭记,让世界知晓中国言论管控的现状。

    一位推特用户写道:“这些事情陆续发生的时候,你可能觉得只是单个事件,个别事件,但是罗列到一起后,你发现周围是一张巨大的网,让你窒息,让你颤抖。其实灾难就在不远处,如何能继续岁月静好?”

    小王也清楚,他所做的事可能会给自己带来风险,说不定他本人就是下一个“被盘点”的对象。

    殷鉴不远——去年4月,北京三名90后疑因在端点星网站备份新冠疫情期间被删除的文章被失踪,陈玫和蔡伟随后以“寻衅滋事罪”被逮捕;2016年,收集、发布中国群体性抗争事件的贵州小伙儿卢昱宇和当时的女友李婷玉被抓。隔年8月,卢昱宇被法院以“寻衅滋事罪”判处四年徒刑;李婷玉被判刑两年、缓刑三年。

    “当我收集到他们的案例时,我自己也是震惊了,”小王对美国之音说。 “同时我也意识到我可能是下一个。”

    但是,当小王真正意识到自己可能是“下一个”的时候,他觉得“已经没有回头路了。我必须一直做下去,不管结果怎样”。

    “因为我知道,即使我停下来了,就算我把这个推特账号删除了,未来被迫害的风险还是大大存在的。 我宁愿被他们迫害也不愿停下来,”他说。

    他对美国之音说,中共在各地抓异见者的目的就是杀一儆百,想让人们闭嘴,如果自己也跟着闭嘴,无异于让威权统治得逞,“如果一个国家连言论自由都要迫害,自由在这个国家应该已经是被连根拔起了。”

    小王说,他会将这份留存记忆的工作一直做下去,直到有一天自己也被消失,或者中国彻底不再有因言获罪的那一天。

  3. 习猪习 抵抗者运动
  4. 习猪习 抵抗者运动
    习猪习   在小组 2047 发表文章

    火光一個多月沒有更新了

  5. 习猪习 抵抗者运动
    习猪习   在小组 站务 发表文章

    新品蔥舊帖:转让域名 pincong.org

  6. 习猪习 抵抗者运动
    习猪习   在小组 2047 发表文章

    由好奇心日報備份計劃教大家備份網站

    大家好,我是 习猪习 a.k.a. 新品蔥 和 Github 上的 PincongBot。有論壇用戶邀請我搶救性備份 Qdaily 好奇心日報,因此就趁這個機會,淺談一下我一直在做的網站備份,同時手把手地教大家寫一點代碼。

    PincongBot 這個名字來自於小二使用的 TerminusBot

    我寫這篇文章的原意是作為自己的日常筆記,但是希望這能夠成為為 2047 論壇引流的優質內容。

    我先假設讀者們不懂技術,因此我會嘗試使用儘可能直白的語言和代碼為大家解釋。


    和一些人想象的不同,我在備份網站時優先考慮使用的不是爬蟲,而是會尋找是否有 API 可供使用,因為 API 往往可以提供比網頁更多的信息。

    如何找到需要的 API ?

    首先,搜尋 API 文檔。如果網站願意開放 API,都會提供詳細的 API 文檔。

    如果沒有,則尋找頁面發出的異步(和頁面自身不是同時加載)网络请求。

    XHR,或者現代化的 fetch API 請求

    http://www.qdaily.com/articles/65148.html 這一個頁面為例。按 開啟開發者工具中的網路監視器,點選工具條中的 XHR ,以過濾出 XHR 請求。

    將頁面下拉以加載 lazy-loading 的剩餘內容,可以看到幾個 XHR 請求,其中看起來有用的是 http://www.qdaily.com/comments/article/65148/0.json。其中 65148 可以知道是 article id ,0 的意義目前還未知。

    後面知道這個是 :key 分頁索引 時間戳,第一頁為 0 ,下一頁的索引為返回結果中的 last_key 字段

    通過同樣的方法我還找到了下列 API
    http://www.qdaily.com/homes/articlemore/:key.json
    http://www.qdaily.com/tags/tagmore/:tag_id/:key.json
    http://www.qdaily.com/comments/paper/:paper_id/:key.json
    http://www.qdaily.com/labs/papermore/:key.json
    

    吐槽一下,都 2020 年了還沒有部署 HTTPS

    行動端 APP 往往會使用 API 獲取數據,因此讓我們來解包 Android apk

    通過解包 Android apk 檔案(如何解包 apk 就是另外一個話題了,挖坑待填),檢索代碼中的關鍵字,如 api,真的有。

    發現的 API 列表(有些是不能使用的)

    前面都要加上 http://app3.qdaily.com/

    app3/articles/detail/%s.json
    app3/articles/info/%s.json
    app3/authors/index/%s/%s.json
    app3/boot_advertisements.json
    app3/categories/index/%s/%s.json
    app3/column_ads/info/%s.json
    app3/columns/all_columns_index/%s.json
    app3/columns/article_in_all_columns/%s.json
    app3/columns/index/%s/%s.json
    app3/columns/info/%s.json
    app3/comments/create_comment
    app3/devices/android
    app3/feedbacks
    app3/homes/index/%s.json
    app3/homes/left_sidebar.json
    app3/options/mob_create_option
    app3/options/mob_create_praise
    app3/paper/choices
    app3/paper/choices/%s
    app3/paper/choices/result/%s
    app3/paper/tot_results/%s
    app3/paper/tots
    app3/paper/tots/%s
    app3/paper/whos
    app3/paper/whos/%s
    app3/paper/whos/result/%s
    app3/papers/detail/%s.json
    app3/papers/done
    app3/papers/index/%s.json
    app3/praises/create_praise
    app3/radars/index/%s/%s.json
    app3/read_the_statistics
    app3/reads
    app3/searches/post_list
    app3/shares
    app3/subscribes/create_subscribe
    app3/subscribes/remove_subscribe
    app3/tags/index/%s/%s.json
    app3/user_feedbacks
    app3/users/center
    app3/users/comment_on_my
    app3/users/find_password
    app3/users/my_comments
    app3/users/my_praises
    app3/users/my_subscription
    app3/users/paper_detail?paper_id=%s
    app3/users/papers
    app3/users/praise_on_my
    app3/users/praises
    app3/users/profiles/message_number.json?uuid=%s
    app3/users/radar
    app3/users/scan_history
    app3/users/setting
    app3/users/sync_to_phone_praises
    app3/users/sync_to_server_praises
    app3/users/system_message_on_my
    app3/users/tourist_praises
    app3/users/update_my_personal_information
    

    嘗試其中一個,如 http://app3.qdaily.com/app3/authors/index/589058/0.json 。WTF! 這就把行動端的 API 全部暴露給我們了。

    這就是在生產環境將環境變量 (在這裡是 PASSENGER_APP_ENV) 設為 development 忘記改回來的後果。在生產環境中開發調試是一個不好的習慣。

    暴露的 API 中能找到一些對我們有用的。

    使用 API 備份

    準備

    1. 配置 Python3 環境
    2. 安裝依賴
    pip3 install requests
    
    1. 新建 main.py 文件
    2. 編輯 main.py 文件

    代碼中使用到的 request_json, format_user_info, format_category_info, format_article_info, format_comment_info, format_child_comment, write_json 等函數,需要根據需求和實際情況自行實現

    備份文章

    使用的 API 為 /wxapp/articles/info/:id

    為什麼要用這個而不是 /app3/articles/info/:id? 因為它一次性提供的信息最全

    定義 URL 模板

    BASE_URL = "http://app3.qdaily.com"
    ARTICLE_URL_TPL = BASE_URL + "/wxapp/articles/info/{id}"
    

    定義函數 backup_article, 參數為 article_id

    def backup_article(article_id):
        # 用實際的 article id 替換 URL 模板中的 `:id`
        url = ARTICLE_URL_TPL.format(id=article_id)
    
        # API 請求
        json = request_json(url)
        if json is None:
            return
    
        post = json['response']['post']
    
        # 格式化作者信息
        author = format_user_info(json['response']['author'])
    
        # 格式化分類信息
        category = format_category_info(post['category'])
    
        # 格式化文章數據,只保留我們想要的數據
        article = format_article_info(post, author['id'])
    
        ###
        # 寫入文章數據
        ###
        write_json(article)
    
        ###
        # 寫入作者信息
        ###
        write_json(author)
    
        ###
        # 寫入分類信息
        ###
        write_json(category)
    

    恰巧文章的 id 是遞增的整數。我們用暴力方法,備份所有文章(因為一些文章根本就不會出現在文章索引中)

    我們需要從 article id 為 1 開始嘗試備份,一直到目前最新的 65270

    因此寫一個 for range 循環

    for article_id in range(1, 65270+1):
        backup_article(article_id)
    

    備份文章評論

    使用的 API 為 /wxapp/comments/index/:comment_type/:id/:last_key,其中 :last_key 是分頁索引,第一頁為 0 ,下一頁的索引為返回結果中的 last_key 字段

    定義 URL 模板

    COMMENT_URL_TPL = BASE_URL + "/wxapp/comments/index/{comment_type}/{id}/{last_key}"
    

    定義函數 backup_comments, 參數為 parent (backup_article 中的 article 文章數據)

    def backup_comments(parent):
        last_key = 0  # 分頁索引第一頁為 0
    
        # 不斷備份下一頁,直到跳出循環
        while True:
            url = COMMENT_URL_TPL.format(
                comment_type=parent['type'], id=parent['id'],
                last_key=last_key
            )
    
            json = request_json(url)
            comments = json['response']['comments']
    
            # 處理這一頁上的每一個評論
            for c in comments:
                # 格式化作者信息
                author = format_user_info(c['author'])
                # 格式化評論數據
                comment = format_comment_info(c)
                # 寫入作者信息
                write_json(author)
                # 寫入評論數據
                write_json(comment)
                # 備份子評論
                for cc in c['child_comments']:
                    # 寫入子評論數據
                    write_json(format_child_comment(cc))
                    # 寫入子評論的作者信息
                    write_json(format_user_info(cc['author']))
    
            # 有更多評論 (分頁)
            if json['response']['has_more']:
                # 下一頁的分頁索引為返回結果中的 last_key 字段
                last_key = int(json['response']['last_key'])
                # 備份下一頁
                continue
            else:
                # 沒有更多頁了
                # 跳出循環
                break
    

    backup_article 函數的最後加上

        if article['comment_count'] > 0:
            backup_comments(article)
    

    備份圖片

    由於圖片都儲存在好奇心日報主站的服務器上,如果主站挂了,圖片就全部丟失了。

    這是小二曾提出的問題

    其中一種解決方案是,在格式化文章數據時,使用 正則表達式 查找正文中的圖片,非阻塞地下載並保存

    備份好奇心研究所

    TODO



    備份的成果在 https://github.com/PincongBot/qdaily ,欢迎 star 和 fork 。

  7. 习猪习 抵抗者运动
    习猪习   在小组 2047 发表文章

    大家好,我是 2049bbs 备份的作者

    既然論壇中有用戶已經知道了,這件事没有什么值得隐瞒的,我是 2049bbs.github.io 的备份者。

    首先感谢站长 @thphd 能够利用好我的备份数据,恢复论坛。

    没事儿,论坛源码在这里,……把站长抓了,总有一个站友站出来,……2050bbs再续前缘。

    如果不是有 2049bbs 的近乎完整的公開備份數據,加上站長的無私努力,很難想象能否在 2049bbs 关闭後,在這裡再次與大家相見。

    2018年9月牆外樓关闭,10月30日,品葱爆破。一周多后的11月8日,旧膜乎 (mohu.club) 关闭了。2019年1月香港人站長的奇闻录也迫於壓力关站(不知多少人還記得這幾個網站)。很可惜,大部分數據沒能留存下來,煙消雲散了,只能从网页快照中恢复一些断垣残壁,心痛。所以對於任何一個抵抗者網站來說,在網站還正常運行的時候,就嘗試去備份它!能夠用及时的数据恢复完整内容,非常重要。

    我非常希望站長 @thphd@NodeBE4@沉默的广场@Resistance ,我 ,還有任何有能力/有技術的同僚,可以一起合作完成一項有意义的开源项目。


    To @九頭鳥@NodeBE4,我自己,和所有不是共匪國安網警的用戶

    無論是誰,有著共同目標的大家請間放下一切的猜疑、指責、内斗,坦诚相见。 我们共同的敌人是共匪的專制暴政,而抵抗者们原子化、散沙化是共匪乐意看见的。

  8. 习猪习 抵抗者运动
    习猪习   在小组 站务 发表文章

    页面每隔一段时间 ping 服务器的意义是什么?

    • 如果是为了显示右下角的连接时间 ms ,那么零次或者一次足矣
    • 如果是为了分析页面停留时间,那么动机……