disfactory

Month: 2023-06

2023-06-13

peii 00:30:47
嗨disfactory的大家晚安

大家可能有看到近幾天關於地球公民基金會的新聞,關於我們基金會執行長被控訴性騷擾,以及組織未積極處理應對,致使當事人十分受創。
雖然這件事是發生在十年前,與disfactory專案、違章工廠議題並無直接關係,但是這畢竟是對於地球公民基金會來說很嚴重的事,被控訴人也是我們親近的工作夥伴。身為disfactory的坑主以及地球公民基金會的員工,我覺得有義務給大家一個說明。

目前面對相關的指控,基金會已啟動性平機制,由會內推舉出2名成員、1名董監事與聘請外部2位性平、法律專業人士組成獨立調查小組,對案件進行調查。這項調查對於甫成立性平機制的我們來說,也是一次我們非常嚴肅、認真看待的實踐。我們希望調查的目的,除了在確認被控訴者行為不當後需給予適當的處分之外,更需要透過調查的釐清,去嘗試理解被害人、修復組織內的信任關係,並作為檢視組織錯誤的重要參考依據。

這件事確實讓我們組織內部有許多討論跟反省,外界也對我們發出很多不諒解的聲音,認為我們平常在倡議上總訴諸公理正義,自己在性別正義實踐上卻如此輕忽。

這是我們必須承認且共同承擔的。
這不是一件容易的事,坦白說真的非常非常困難。

向大家說明這些,是希望讓disfactory的各位了解基金會現在的立場與作法,那如果對這件事尚有疑慮的人也很歡迎讓我知道。

在這邊也附上我們基金會對目前啟動性平機制的聲明

Facebook

Log into Facebook

Log into Facebook to start sharing and connecting with your friends, family, and people you know.

地公的大家多保重!
Ryno Hsiao 2023-06-13 18:01:58
辛苦了!需要斟酌字句產出這些聲明的地球公民基金會成員們真的很不容易,加油!
👍 12 ❤️ 5
peii 00:30:47
嗨disfactory的大家晚安

大家可能有看到近幾天關於地球公民基金會的新聞,關於我們基金會執行長被控訴性騷擾,以及組織未積極處理應對,致使當事人十分受創。
雖然這件事是發生在十年前,與disfactory專案、違章工廠議題並無直接關係,但是這畢竟是對於地球公民基金會來說很嚴重的事,被控訴人也是我們親近的工作夥伴。身為disfactory的坑主以及地球公民基金會的員工,我覺得有義務給大家一個說明。

目前面對相關的指控,基金會已啟動性平機制,由會內推舉出2名成員、1名董監事與聘請外部2位性平、法律專業人士組成獨立調查小組,對案件進行調查。這項調查對於甫成立性平機制的我們來說,也是一次我們非常嚴肅、認真看待的實踐。我們希望調查的目的,除了在確認被控訴者行為不當後需給予適當的處分之外,更需要透過調查的釐清,去嘗試理解被害人、修復組織內的信任關係,並作為檢視組織錯誤的重要參考依據。

這件事確實讓我們組織內部有許多討論跟反省,外界也對我們發出很多不諒解的聲音,認為我們平常在倡議上總訴諸公理正義,自己在性別正義實踐上卻如此輕忽。

這是我們必須承認且共同承擔的。
這不是一件容易的事,坦白說真的非常非常困難。

向大家說明這些,是希望讓disfactory的各位了解基金會現在的立場與作法,那如果對這件事尚有疑慮的人也很歡迎讓我知道。

在這邊也附上我們基金會對目前啟動性平機制的聲明
地公的大家多保重!
Ryno Hsiao 2023-06-13 18:01:58
辛苦了!需要斟酌字句產出這些聲明的地球公民基金會成員們真的很不容易,加油!
chewei 02:11:05
g0v Summit 活動籌劃頻道,也有相關機制上的討論
https://g0v-tw.slack.com/archives/C04U8DKBGSX/p1685868120055189
謝謝!訂定CoC好重要,我也來提供給會內參考
嗯嗯,例如要求 活動參加者,須遵守 CoC,主辦單位與工作人員,也有依據能進行當下處理;不過從討論串內容來看,似乎尚需要提供夠明確的、能協助受騷擾者當下因應騷擾行為的方案,有提到「安全區」劃設 ..等
chewei 02:11:05
g0v Summit 活動籌劃頻道,也有相關機制上的討論
https://g0v-tw.slack.com/archives/C04U8DKBGSX/p1685868120055189

<https://www.facebook.com/permalink.php?story_fbid=pfbid0BVF8v6fnZuNkSEgDya8hfA2mv9tr8dHX6j2xjeJSFpVfPwbf8zq9zrQMCWZUBJiJl&amp;id=100000132604046&amp;comment_id=975576960257187&amp;notif_id=1685867853958150&amp;notif_t=feedback_reaction_generic&amp;ref=notif|https://www.facebook.com/permalink.php?story_fbid=pfbid0BVF8v6fnZuNkSEgDya8hfA2mv9tr8[…]1685867853958150&amp;notif_t=feedback_reaction_generic&amp;ref=notif> 在這則文下有提到 2016 summit 曾柏文在場邊有對參與者有不恰當互動 我想提出討論 code of conduct 更新和實際執行方案 (也許可以在大會期間設立特別工作小組,接受回報)

謝謝!訂定CoC好重要,我也來提供給會內參考
嗯嗯,例如要求 活動參加者,須遵守 CoC,主辦單位與工作人員,也有依據能進行當下處理;不過從討論串內容來看,似乎尚需要提供夠明確的、能協助受騷擾者當下因應騷擾行為的方案,有提到「安全區」劃設 ..等
👍 3
peii 19:46:17
# 違章工廠回報系統地159次小聚 🦤
以下開放許願零食!

時間:20220614 (三) 19:30 (GMT+8)
地點:線上/實體 hybrid
線上:https://meet.google.com/coc-vuaa-ykz
實體地點:地球公民基金會台北辦公室(北平東路28號9樓之2)
小聚共筆:
https://g0v.hackmd.io/uHbcdyeCRfqKdDe63yJAZQ

議程:
19:30-20:00 新參者on board + 進度閒聊
20:00-21:00 Disfactory + SpotDiff 綜合討論
- Landing page API串接
- 匯入經濟部資料到disfactory.tw
21:00- 自由加點!

meet.google.com

Meet

Real-time meetings by Google. Using your browser, share your video, desktop, and presentations with teammates and customers.

4
peii 19:46:17
# 違章工廠回報系統地159次小聚 🦤
以下開放許願零食!

時間:20220614 (三) 19:30 (GMT+8)
地點:線上/實體 hybrid
線上:https://meet.google.com/coc-vuaa-ykz
實體地點:地球公民基金會台北辦公室(北平東路28號9樓之2)
小聚共筆:

議程:
19:30-20:00 新參者on board + 進度閒聊
20:00-21:00 Disfactory + SpotDiff 綜合討論
- Landing page API串接
- 匯入經濟部資料到disfactory.tw
21:00- 自由加點!

2023-06-14

as840922qq 18:48:02
農地違章工廠回報系統 網站有更新:
• safari 字型修正
• 新增手機版的側欄(點選後出現清單)
• 手機版破版的有先修正(之後設計稿有更新會再一起更新)
• 小小行動大大改變:先暫時隱藏,等 api 確定串接好後再顯示,以免大家對數據有誤會
待處理:
• 小小行動大大改變:api 資料
• 常見問題: QA 內容要可以延續上一版的查詢功能
• (個人許願)多加一些動態效果~
如果有新的希望修正都可以跟我說!我記錄下來~ :boogie-penguin:

農地違章工廠回報 | 地球公民基金會

農地違章工廠回報 | 地球公民基金會

你的回報是行動的開始,有大宗回報,政府才有動起來的壓力。

@swind 小小行動大大改變那邊的api再麻煩了!上次討論好像是舊的還是可以直接沿用?
https://github.com/Disfactory/Disfactory/issues/635
as840922qq 2023-06-14 20:01:16
喔喔喔好!我來加個
*GET*/statistics​/total
統計全台灣各縣市的工廠情況, 處理進度與回報情況
FAQ 部分:

• 地球公民基金會可以加超連結連到基金會網頁
• 「我的回報是否匿名?」段落,Disfactory.tw 要不要統一改為「違章工廠回報系統」,並加上超連結?因為這邊是 Disfactory.tw 這個詞第一次出現在這個頁面上。其他部分的 FAQ 也有引用到 Disfactory.tw 這個詞
as840922qq 2023-06-14 20:43:38
新修正:
• _於是,我們製作了這些工具_ >> 底下兩個按鈕加上連結
• FAQ:*地球公民基金會* 附上連結
• FAQ:Disfactory.tw 統一換成 違章工廠回報系統
@as840922qq

結果發現現在 yarn install 會壞掉 😂

https://github.com/Automattic/node-canvas/issues/2078
可能也跟之前升到 yarn.lock 有關
as840922qq 2023-06-14 21:58:55
API 串好了!!!感恩 swind 讚嘆 swind
as840922qq 2023-06-14 22:07:15
好滴我改一下 感謝通知!!
@as840922qq 想請你幫忙更改刮刮樂灰色區塊的部分,想把灰色區塊更改成資料夾裡面檔名「1.png」那張圖~
我會同步開issue
https://www.dropbox.com/sh/y4jq0twj0ko22uo/AAB-5oIrmA0VF9jEAB978eR9a?dl=0
as840922qq 2023-07-06 15:54:55
收到!
另外還有一個小issue就是,手機版沒有出現刮刮樂,這個也再麻煩@as840922qq了!
as840922qq 2023-07-12 17:20:05
修正更新:
• 字體都改成 Noto Sans CJK TC(同設計稿)
• 更新刮刮樂圖片+新增手機版刮刮樂
2 🐝 1
as840922qq 18:48:02
農地違章工廠回報系統 網站有更新:
• safari 字型修正
• 新增手機版的側欄(點選後出現清單)
• 手機版破版的有先修正(之後設計稿有更新會再一起更新)
• 小小行動大大改變:先暫時隱藏,等 api 確定串接好後再顯示
待處理:
• 小小行動大大改變:api 資料
• (個人許願)多加一些動態效果~
如果有新的希望修正都可以跟我說!我記錄下來~ :boogie-penguin:
@swind 小小行動大大改變那邊的api再麻煩了!上次討論好像是舊的還是可以直接沿用?
https://github.com/Disfactory/Disfactory/issues/635
as840922qq 2023-06-14 20:01:16
喔喔喔好!我來加個
*GET*/statistics​/total
統計全台灣各縣市的工廠情況, 處理進度與回報情況
FAQ 部分:

• 地球公民基金會可以加超連結連到基金會網頁
• 「我的回報是否匿名?」段落,Disfactory.tw 要不要統一改為「違章工廠回報系統」,並加上超連結?因為這邊是 Disfactory.tw 這個詞第一次出現在這個頁面上。其他部分的 FAQ 也有引用到 Disfactory.tw 這個詞
as840922qq 2023-06-14 20:43:38
新修正:
• _於是,我們製作了這些工具_ >> 底下兩個按鈕加上連結
• FAQ:*地球公民基金會* 附上連結
• FAQ:Disfactory.tw 統一換成 違章工廠回報系統
@as840922qq

結果發現現在 yarn install 會壞掉 😂

https://github.com/Automattic/node-canvas/issues/2078
可能也跟之前升到 yarn.lock 有關
as840922qq 2023-06-14 21:58:55
API 串好了!!!感恩 swind 讚嘆 swind
as840922qq 2023-06-14 22:07:15
好滴我改一下 感謝通知!!
@as840922qq 想請你幫忙更改刮刮樂灰色區塊的部分,想把灰色區塊更改成資料夾裡面檔名「1.png」那張圖~
我會同步開issue
https://www.dropbox.com/sh/y4jq0twj0ko22uo/AAB-5oIrmA0VF9jEAB978eR9a?dl=0
as840922qq 2023-07-06 15:54:55
收到!
另外還有一個小issue就是,手機版沒有出現刮刮樂,這個也再麻煩@as840922qq了!
as840922qq 2023-07-12 17:20:05
修正更新:
• 字體都改成 Noto Sans CJK TC(同設計稿)
• 更新刮刮樂圖片+新增手機版刮刮樂
Ryno Hsiao 21:35:50
哈囉!想說這裡會有很多愛閱讀的人們,我想分享一個工具:
由於我是閱讀器跟電子書愛好者,之前在看Kindle閱讀器的時候發現了一個工具叫Readwise,他是一個可以串接各種服務(包含樂天kobo、Pocket等)並且匯入你的highlights,並且將這些highlight整理成電子報定期寄送信件給你的服務。我覺得對於閱讀量大的朋朋們應該是滿有幫助的。
如果是閱讀網路文章比較多的朋友,最近他們出的Readwise Reader跨平台服務也很棒,你可以收藏網路文章的副本、聽書、留下註記或者筆記(而且有沈浸閱讀模式,無廣告專心閱讀!),甚至可以rss訂閱固定媒體的新文章,這個服務已經取代我以前使用的feedly了!(不用依靠臉書演算法推一些品質不固定的消息或媒體,讚讚!)
用這個連結申請帳號,你我都可以獲得多一個月的試用期(共60天):https://readwise.io/i/ryno5
我也剛好是三週前開始用XD 因為我還有用Hepta,那些highlight還直接變成一張張可以直接搜尋、引用的卡片,讓我非常驚艷。
我的試用期剩八天,也在認真思考要不要繼續用下去
https://readwise.io/i/js02
Ryno Hsiao 21:35:50
哈囉!想說這裡會有很多愛閱讀的人們,我想分享一個工具:
由於我是閱讀器跟電子書愛好者,之前在看Kindle閱讀器的時候發現了一個工具叫Readwise,他是一個可以串接各種服務(包含樂天kobo、Pocket等)並且匯入你的highlights,並且將這些highlight整理成電子報定期寄送信件給你的服務。我覺得對於閱讀量大的朋朋們應該是滿有幫助的。
如果是閱讀網路文章比較多的朋友,最近他們出的Readwise Reader跨平台服務也很棒,你可以收藏網路文章的副本、聽書、留下註記或者筆記(而且有沈浸閱讀模式,無廣告專心閱讀!),甚至可以rss訂閱固定媒體的新文章,這個服務已經取代我以前使用的feedly了!(不用依靠臉書演算法推一些品質不固定的消息或媒體,讚讚!)
用這個連結申請帳號,你我都可以獲得多一個月的試用期(共60天):https://readwise.io/i/ryno5

readwise.io

Readwise

Grow wiser and retain books better: Readwise sends you a daily email resurfacing your best highlights from Kindle, Instapaper, iBooks, and more.

我也剛好是三週前開始用XD 因為我還有用Hepta,那些highlight還直接變成一張張可以直接搜尋、引用的卡片,讓我非常驚艷。
我的試用期剩八天,也在認真思考要不要繼續用下去
https://readwise.io/i/js02
4
as840922qq 21:58:55
API 串好了!!!感恩 swind 讚嘆 swind
👌 2
Ryno Hsiao 22:53:27
我忘了拿我的傘了🥲可以請 @peii 先暫時幫我保管嗎~我找時間過去拿~是一把卡其色的摺疊傘,放在辦公室外面傘桶旁邊
好喔!
Ryno Hsiao 22:53:27
我忘了拿我的傘了🥲可以請 @peii 先暫時幫我保管嗎~我找時間過去拿~是一把卡其色的摺疊傘,放在辦公室外面傘桶旁邊
好喔!

2023-06-15

2023-06-21

ael 08:19:06
這邊有很多跟土地議題有關的工具集
https://www.earthdefenderstoolkit.com/toolfinder/
ael 08:19:06
這邊有很多跟土地議題有關的工具集
https://www.earthdefenderstoolkit.com/toolfinder/

Earth Defenders Toolkit

Toolfinder - Earth Defenders Toolkit

The Earth Defenders Toolkit is a collaborative space for earth defender communities and their allies.

2 🐙 1

2023-06-27

peii 17:38:28
*大家來找廠官方版:國土利用監測整合資訊系統升級*

營建署利用衛星空拍抓出土地「變異點」,並建置「歷年衛星影像暨變異點展示平台」,供民眾查詢。
過去的公開資訊
:white_check_mark:只有:變異點編號、權責單位、查證結果與變異類型
:x:沒有:時間回報及變異點的處理狀態

這次的更動,最主要就是添加了一欄「變異點查報進度」,可以看該點位有沒有被政府單位查核,到底是違規還是合法的狀態/
但目前好像無法直接獲取變異點位的經緯度
不然
peii 17:43:19
*大家來找廠官方版:國土利用監測整合資訊系統升級*:rocket:

營建署利用衛星空拍抓出土地「變異點」,並建置「歷年衛星影像暨變異點展示平台」,供民眾查詢。
過去的公開資訊
✅只有:變異點編號、權責單位、查證結果與變異類型
❌沒有:時間回報及變異點的處理狀態

這次的更動,最主要是添加了「變異點查報進度」(如附圖),可以看該點位有沒有被政府單位查核,到底是違規還是合法的狀態。
但目前好像無法直接獲取變異點位的經緯度

不然我們是不是可以去掉合法的點位,當作大家來找廠的題目?!
螢幕擷取畫面 2023-06-27 172659.jpg
螢幕擷取畫面 2023-06-27 173915.jpg
peii 17:45:57
# 違章工廠回報系統地160次小聚 🦤
以下繼續開放許願零食!

時間:20220614 (三) 19:30 (GMT+8)
地點:線上/實體 hybrid
線上:https://meet.google.com/coc-vuaa-ykz
實體地點:地球公民基金會台北辦公室(北平東路28號9樓之2)
小聚共筆:
https://g0v.hackmd.io/uHbcdyeCRfqKdDe63yJAZQ

議程:
19:30-20:00 新參者on board + disfactory T恤ㄉbrainstorming
20:00-21:00 Disfactory + SpotDiff 綜合討論
- Landing page API串接
- 匯入經濟部資料到disfactory.tw
21:00- 自由加點! (edited)

2023-06-28

peii 14:37:30
# 違章工廠回報系統地160次小聚 🦤
以下繼續開放許願零食!

時間:20220628 (三) 19:30 (GMT+8)
地點:線上/實體 hybrid
線上:https://meet.google.com/coc-vuaa-ykz
實體地點:地球公民基金會台北辦公室(北平東路28號9樓之2)
小聚共筆:
https://g0v.hackmd.io/uHbcdyeCRfqKdDe63yJAZQ

議程:
19:30-20:00 新參者on board + disfactory T恤ㄉbrainstorming
20:00-21:00 Disfactory + SpotDiff 綜合討論
- Landing page API串接
- 匯入經濟部資料到disfactory.tw
21:00- 自由加點!

meet.google.com

Meet

Real-time meetings by Google. Using your browser, share your video, desktop, and presentations with teammates and customers.

as840922qq 2023-06-28 16:49:42
這週有事請假一次 🙏
有需要修改的部分可以留言跟我說~
Ryno Hsiao 2023-06-28 19:03:21
來不及的許願之蛋黃派
BTW會晚點抵達
好ㄉ,如果我30分沒有準時上線那就是在買蛋黃派,請大家稍待片刻!
``` <script type='text/javascript'>Cenx=25.112230306692393;Ceny=121.67971359077572;iZoom=10;ImgYear=-1;ChgYear=112;ChgCity=-1;selectMapValues=3;function markerBind(){setMarkers(25.14927, 121.49711,'變異點編號:AA1611203002<br/>權責單位:臺北市<br/>查證結果:合法<br/>變異類型:一般農業使用(含農地水土保持、農業設施、民眾闢設道路等開發案件)','chg.png');```
[‘基隆市‘,’臺北市‘,’新北市‘,’桃園市‘,’新竹縣‘,’新竹市‘,’苗栗縣‘,’臺中市‘,’南投縣‘,’彰化縣‘,’雲林縣‘,’嘉義縣‘,’嘉義市‘,’臺南市‘,’高雄市‘,’屏東縣‘,’宜蘭縣‘,’花蓮縣‘,’臺東縣‘,’金門縣‘,’澎湖縣‘,’連江縣’].length == 22
```import requests

cities = [
'基隆市', '臺北市', '新北市', '桃園市', '新竹縣', '新竹市', '苗栗縣', '臺中市', '南投縣', '彰化縣', '雲林縣',
'嘉義縣', '嘉義市', '臺南市', '高雄市', '屏東縣', '宜蘭縣', '花蓮縣', '臺東縣', '金門縣', '澎湖縣', '連江縣'
]

year = 112

for city in cities:
print(f"Loading {year} {city}")
headers = {'User-Agent': 'Mozilla/5.0'}
data = {"ProjectYear": 112, "City": city}
response = requests.post(
'https://landchg.tcd.gov.tw/Module/RWD/Web/pub_exhibit.aspx',
headers=headers,
data=data)

with open(f"{year}_{city}.html", "w") as fp:
fp.write(response.text)```
把 Set markers call 都 extract 出來

```#!/bin/bash

# Iterate over directories
for year_dir in */ ; do
# Iterate over HTML files in directories
for html_file in $year_dir*.html ; do
# Check if the file exists
if [ -f "$html_file" ]; then
# Use perl to find function markerBind and its content
perl -nle 'print $& if m{(?<=function markerBind\(\)\{)(.*?)(?=\})}' "$html_file" > "${html_file%.html}.js"
fi
done
done```
```// extractJSON.js
const fs = require('fs');
const path = require('path');

// Check if a year argument is provided
if (process.argv.length < 3) {
console.log("Please provide a year as an argument. Example: node script.js 2023");
process.exit(1);
}

const year = process.argv[2];
const yearPath = path.join('.', year);

// Define setMarkers function
global.setMarkers = (lat, long, htmlString, icon) => {
const city = currentFile.split('_')[1].replace('.js', ''); // Extract city name from file name
if (!city) return;
if (!cityData[city]) cityData[city] = [];
cityData[city].push({
lat,
long,
details: htmlString,
icon,
});
};

let currentFile;
const cityData = {};

// Iterate over .js files in the year directory
fs.readdirSync(yearPath).forEach((file) => {
if (path.extname(file) === '.js') {
// Save the current file name
currentFile = file;
// Read the .js file
const script = fs.readFileSync(path.join(yearPath, file), 'utf-8');
// Evaluate the script
eval(script);
}
});

// Write the city data to a JSON file
fs.writeFileSync(path.join(yearPath, 'cityData.json'), JSON.stringify(cityData, null, 2));```
整合版

```const fs = require('fs');
const path = require('path');

// Check if a year argument is provided
if (process.argv.length < 3) {
console.log("Please provide a year as an argument. Example: node script.js 2023");
process.exit(1);
}

const year = process.argv[2];
const yearPath = path.join('.', year);

// Iterate over HTML files in the year directory
fs.readdirSync(yearPath).forEach((file) => {
if (path.extname(file) === '.html') {
// Read the HTML file
const htmlContent = fs.readFileSync(path.join(yearPath, file), 'utf-8');

// Extract the content of function markerBind
const markerBindContent = htmlContent.match(/function markerBind\(\)\{(.*?)\}/s);
if (markerBindContent && markerBindContent[1]) {
// Write the content to a .js file
fs.writeFileSync(path.join(yearPath, `${path.basename(file, '.html')}.js`), markerBindContent[1]);
}
}
});

// Define setMarkers function
global.setMarkers = (lat, long, htmlString, icon) => {
const city = currentFile.split('_')[1].replace('.js', ''); // Extract city name from file name
if (!city) return;
if (!cityData[city]) cityData[city] = [];
cityData[city].push({
lat,
long,
details: htmlString,
icon,
});
};

let currentFile;
const cityData = {};

// Iterate over .js files in the year directory
fs.readdirSync(yearPath).forEach((file) => {
if (path.extname(file) === '.js') {
// Save the current file name
currentFile = file;
// Read the .js file
const script = fs.readFileSync(path.join(yearPath, file), 'utf-8');
// Evaluate the script
eval(script);
}
});

// Write the city data to a JSON file
fs.writeFileSync(path.join(yearPath, 'cityData.json'), JSON.stringify(cityData, null, 2));```
@swind 後來把 perl 部分也請他重寫了 XD
peii 14:37:30
# 違章工廠回報系統地160次小聚 🦤
以下繼續開放許願零食!

時間:20220628 (三) 19:30 (GMT+8)
地點:線上/實體 hybrid
線上:https://meet.google.com/coc-vuaa-ykz
實體地點:地球公民基金會台北辦公室(北平東路28號9樓之2)
小聚共筆:
https://g0v.hackmd.io/uHbcdyeCRfqKdDe63yJAZQ

議程:
19:30-20:00 新參者on board + disfactory T恤ㄉbrainstorming
20:00-21:00 Disfactory + SpotDiff 綜合討論
- Landing page API串接
- 匯入經濟部資料到disfactory.tw
21:00- 自由加點!
as840922qq 2023-06-28 16:49:42
這週有事請假一次 🙏
有需要修改的部分可以留言跟我說~
Ryno Hsiao 2023-06-28 19:03:21
來不及的許願之蛋黃派
BTW會晚點抵達
好ㄉ,如果我30分沒有準時上線那就是在買蛋黃派,請大家稍待片刻!
``` <script type='text/javascript'>Cenx=25.112230306692393;Ceny=121.67971359077572;iZoom=10;ImgYear=-1;ChgYear=112;ChgCity=-1;selectMapValues=3;function markerBind(){setMarkers(25.14927, 121.49711,'變異點編號:AA1611203002<br/>權責單位:臺北市<br/>查證結果:合法<br/>變異類型:一般農業使用(含農地水土保持、農業設施、民眾闢設道路等開發案件)','chg.png');```
[‘基隆市‘,’臺北市‘,’新北市‘,’桃園市‘,’新竹縣‘,’新竹市‘,’苗栗縣‘,’臺中市‘,’南投縣‘,’彰化縣‘,’雲林縣‘,’嘉義縣‘,’嘉義市‘,’臺南市‘,’高雄市‘,’屏東縣‘,’宜蘭縣‘,’花蓮縣‘,’臺東縣‘,’金門縣‘,’澎湖縣‘,’連江縣’].length == 22
```import requests

cities = [
'基隆市', '臺北市', '新北市', '桃園市', '新竹縣', '新竹市', '苗栗縣', '臺中市', '南投縣', '彰化縣', '雲林縣',
'嘉義縣', '嘉義市', '臺南市', '高雄市', '屏東縣', '宜蘭縣', '花蓮縣', '臺東縣', '金門縣', '澎湖縣', '連江縣'
]

year = 112

for city in cities:
print(f"Loading {year} {city}")
headers = {'User-Agent': 'Mozilla/5.0'}
data = {"ProjectYear": 112, "City": city}
response = requests.post(
'https://landchg.tcd.gov.tw/Module/RWD/Web/pub_exhibit.aspx',
headers=headers,
data=data)

with open(f"{year}_{city}.html", "w") as fp:
fp.write(response.text)```
把 Set markers call 都 extract 出來

```#!/bin/bash

# Iterate over directories
for year_dir in */ ; do
# Iterate over HTML files in directories
for html_file in $year_dir*.html ; do
# Check if the file exists
if [ -f "$html_file" ]; then
# Use perl to find function markerBind and its content
perl -nle 'print $& if m{(?<=function markerBind\(\)\{)(.*?)(?=\})}' "$html_file" > "${html_file%.html}.js"
fi
done
done```
```// extractJSON.js
const fs = require('fs');
const path = require('path');

// Check if a year argument is provided
if (process.argv.length < 3) {
console.log("Please provide a year as an argument. Example: node script.js 2023");
process.exit(1);
}

const year = process.argv[2];
const yearPath = path.join('.', year);

// Define setMarkers function
global.setMarkers = (lat, long, htmlString, icon) => {
const city = currentFile.split('_')[1].replace('.js', ''); // Extract city name from file name
if (!city) return;
if (!cityData[city]) cityData[city] = [];
cityData[city].push({
lat,
long,
details: htmlString,
icon,
});
};

let currentFile;
const cityData = {};

// Iterate over .js files in the year directory
fs.readdirSync(yearPath).forEach((file) => {
if (path.extname(file) === '.js') {
// Save the current file name
currentFile = file;
// Read the .js file
const script = fs.readFileSync(path.join(yearPath, file), 'utf-8');
// Evaluate the script
eval(script);
}
});

// Write the city data to a JSON file
fs.writeFileSync(path.join(yearPath, 'cityData.json'), JSON.stringify(cityData, null, 2));```
整合版

```const fs = require('fs');
const path = require('path');

// Check if a year argument is provided
if (process.argv.length < 3) {
console.log("Please provide a year as an argument. Example: node script.js 2023");
process.exit(1);
}

const year = process.argv[2];
const yearPath = path.join('.', year);

// Iterate over HTML files in the year directory
fs.readdirSync(yearPath).forEach((file) => {
if (path.extname(file) === '.html') {
// Read the HTML file
const htmlContent = fs.readFileSync(path.join(yearPath, file), 'utf-8');

// Extract the content of function markerBind
const markerBindContent = htmlContent.match(/function markerBind\(\)\{(.*?)\}/s);
if (markerBindContent && markerBindContent[1]) {
// Write the content to a .js file
fs.writeFileSync(path.join(yearPath, `${path.basename(file, '.html')}.js`), markerBindContent[1]);
}
}
});

// Define setMarkers function
global.setMarkers = (lat, long, htmlString, icon) => {
const city = currentFile.split('_')[1].replace('.js', ''); // Extract city name from file name
if (!city) return;
if (!cityData[city]) cityData[city] = [];
cityData[city].push({
lat,
long,
details: htmlString,
icon,
});
};

let currentFile;
const cityData = {};

// Iterate over .js files in the year directory
fs.readdirSync(yearPath).forEach((file) => {
if (path.extname(file) === '.js') {
// Save the current file name
currentFile = file;
// Read the .js file
const script = fs.readFileSync(path.join(yearPath, file), 'utf-8');
// Evaluate the script
eval(script);
}
});

// Write the city data to a JSON file
fs.writeFileSync(path.join(yearPath, 'cityData.json'), JSON.stringify(cityData, null, 2));```
@swind 後來把 perl 部分也請他重寫了 XD