0%

用 Line notify 傳遞 ptt 爬蟲資料

github

原定流程

github action 執行爬蟲程式 => github action 觸發 Line notify

  1. 爬蟲程式
  2. github action
  • 在github action 時, 載入data.js 檔案(設定成secrets)
  • line notify 顯示問題 \n換行
  • Environment variables 在這邊設定要爬的內容&回傳訊息
  1. line notify 通知

遇到的問題

  1. github action 如果使用 schedule: 無法設定觸發的 branch
    • 只能直接綁定執行的branch
      • 但會導致 workflow_dispatch: 選擇branch觸發無效

:::warning
沒有解決
schedule: 使用 default branch 觸發, 就改用 default branch 版本控制
:::
2. 無法將 node index.js 回傳的資料, 直接透過 github action 傳遞參數給 line notify

:::success
解決
改用 writeFileSync 輸出 .txt, github action 透過讀檔傳遞資料
:::
3. Line notify 每次傳訊息字數上限為1000
- 因為 github action forloop 執行 step 有障礙, 大改版

:::success
解決
將 github action 精簡, 不使用 writeFileSync 輸出檔案, 改為爬蟲後呼叫Line notify API
commit
:::
4. Line notify 傳遞訊息時, 可能順序不對

:::success
解決
追加 sleep()
:::
5. PTT爬蟲資料只有內文才有完整日期

:::success
未知
原因: 追加功能 “只顯示幾天前的資料”
解法: 透過12&1月來判斷年分
commit
:::

最終流程

  1. github action 只用來建立執行環境 & 執行

forloop
2. 爬蟲執行
3. 資料轉換
4. 資料過濾
5. 爬蟲結束
END forloop

  1. line notify 傳訊息

後續可能的增加的功能

  1. 想要把參數隱藏起來
  • github Environment variables
  1. 將上一次重複傳的資料移除
  • 初步想法: 產生log檔案後, 建立commit push 至 github, 每次讀檔檢查內容

白酒

自猜

  1. Vermentino 好臭 應該是堅果味 中高酸 苦苦的
  2. 比上一款更酸 簡單 酒精高14.5 輕盈
  3. 中酸 酒體中

答案

  1. viognier 杏桃 木瓜 尾韻苦 成熟芒果 中高酒體 中酸 13.5 2021
  2. 芹菜 白胡椒 Vermentino
  3. 高酸 沒過桶 水水的 GV 礦物感 2021

紅酒

自猜

  1. 蘑菇 洛神 中低酸 果醬
  2. 甜美 中酸 洛神 高丹寧 沒桶味
  3. 蘑菇 高酸 芳香 第一印象Nebbioro 後來抓到蘑菇味 改pinor noir
  4. 顏色紫 甜美 中高酸
  5. Nebbioro 高酸 高丹寧 2018 一點點玫瑰(一開始完全沒抓到一級香氣)
  6. 褐色 有酒渣 中高酸 高丹寧 焦糖 仙楂 高酸高丹寧

答案

  1. 甜美 香料 比較熟一點 皮革 2017 過老的Pinor Noir 托斯卡尼的香料味有點重
  2. 黑醋栗 李子 甜美 青椒味 2015 托斯卡尼CS 很像波爾多
  3. 單寧不高 pinor noir 摩尼頓半島 2019
  4. 紫色中等 紫羅蘭 青椒 pinor noir 蘑菇味 2020 很重的 pinor noir 摩尼頓半島
  5. Nebbioro 土壤 焦油(比較多的味道) 一點點玫瑰 2016 緯度46(和勃根地差不多)(更輕更冷)
  6. 不透光 高丹寧 Nebbioro Barolo 1996 (年份太高不好猜)

酒瓶標籤

1~8隻
第9隻(加碼)

接骨木花 味道像荔枝
判斷特徵要用一級香氣

提示

viognier

  • 水蜜桃 芒果
  • 酒體濃稠
  • 微苦
  • 不酸 (越香酸度越低)

錢會直接影響香氣

Grüner Veltliner(只有台灣人會簡稱GV)

  • 高酸
  • 輕盈
  • 白胡椒 楊桃(輕的)
  • 奧地利

Vermentino

  • 杏仁(堅果味)
  • 水水的
  • 水仙花味道(超好的酒莊才會有)
  • 中高酸

Pinor Noir

  • 日照越多 蘑菇味越多 (紐西蘭 => 蘑菇為超強)
  • 洛神 仙楂
  • 酒體輕盈

Nebbioro

  • 高酸 高丹寧
  • 玫瑰(明顯)
  • 土壤

Cabernet Sauvignon

  • 青椒 石墨

簡單判斷git能力

  1. 能看懂 git log 內容
    git log
  2. 知道 HEAD -> source 和 origin/source 意思
  3. 知道 origin 如何產生

講解 HEAD -> source 和 origin/source 意思

  • 當使用 git commit 後 local 會多一個 commit, 如下圖 HEAD -> source 位置變更了

  • 接著當使用 git push 會將 local 的 commit 推送到 origin/source 讓 origin/source 和 local 同步
    git log - git commit 後

  • origin/source 指的是該 branch 最後一次和 origin 同步的 commit 所在的位置

講解 origin 如何產生

  • 可以使用 git remote -v 可以看到
    git remote -v
  • 這樣就可以知道「git push origin main」的意思了

補充 git remote add

  • 執行下列指令後 git remote -v 的變化

    1
    git remote add upstream git@github.com:superTO/Leetcode.git

    git remote -v - git remote add upstream git@github.com:superTO/Leetcode.git 後

  • 之後使用「git pull upstream master」就可以直接對 git@github.com:superTO/Leetcode.git 的 master 這條 branch 執行 fetch + merge

    1
    這個方法在 fork 專案後, 如果版本落差太大會使用到

每次都要用as強制型別轉換?

1
2
3
4
5
6
7
8
enum Gender {
MALE = 'male',
FEMALE = 'female'
}

const foo = (gender = 'male' as Gender) => {
return Object.values(Gender).includes(gender);
}

Sol 1 Type Guard

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum Gender {
MALE = 'male',
FEMALE = 'female'
}

const isGender = (gender: any): gender is Gender => {
return Object.values(Gender).includes(gender);
}

const foo = (gender = 'male') => {
if(isGender(gender)) {
// .includes(gender) // gender 的型別是Gender
return Object.values(Gender).includes(gender);
}
}
  • 額外補充 「Narrowing」

Sol 2 Generics

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
enum Gender {
MALE = 'male',
FEMALE = 'female'
}

enum Gender_2 {
MALE = 'male',
FEMALE = 'female'
}

const mapper = {
[Gender_2.MALE]: Gender.MALE,
[Gender_2.FEMALE]: Gender.FEMALE
}

const createMapper = <T>(mapping: T) => (value: keyof T | null): T[keyof T] | undefined => {
return value === null ? undefined : mapping[value];
}

const foo = (gender: Gender_2.MALE) => {
const data = { gender: Gender.MALE };
const getMapper = createMapper(mapper);
const trans = getMapper(gender);

return trans === data.gender;
}

Reference

Typescript 一些令人又愛又恨的內容 — Type Guard、Narrowing

出入金流程

  • 入金 (以BitoPro -> 派網為例)
  1. 開通台灣交易所帳號(需要身分認證)、派網帳號
  2. 錢包 -> 加值
  3. 掛單購買USDT
  4. 確認BitoPro錢包有USDT
  5. 開啟派網 -> 充幣 -> 選擇「USDT」 -> 基於哪個鏈選擇「TRC20」-> 複製USDT(TRC20)地址
  6. 錢包 -> 提領 -> 幣別選擇「USDT」 -> 錢包類型選擇「TRX-TRC20」 -> 提領到「貼上剛剛派網複製的地址」 -> 點選「提領」
  7. 等待(10分鐘內), 金額不會馬上轉過去

台灣交易所(台幣 換 USDT)

  1. Bitopro (深度夠)
    • BitoDebt 那個債不要買,報酬太低還要搶。喜歡買債的話,Ace 交易所的債,利率好一些,記住這些債都要打八折報酬,因為他們收20%手續費沒寫在外面
  2. ACE王牌交易所(政府互動最頻繁)
  3. MAX
  • bito max ace 這三個是台灣的交易所
  • 前期要把台幣變虛擬幣,這是必要的地方,真實身分認證有點花時間,建議先挑一個做好驗證

大筆資金請用美元電匯 FTX

  • FTX到帳金額要1萬美才不會收手續費

入金

流程/手續費計算

個人判斷

適合投資的項目:

主流幣(ex: BTC, ETH) -> 網格機器人
有潛力的幣(ex: DOT, FIL) -> 屯幣寶

期限套利

  • 資金費率0.01% - 約年化7%報酬率

套利機器人設定

網格機器人

  • 錢不夠多就減少網格數量不要修改上下限

天地單設定

  • 等比就是穩定輸出

  • 等差如果漲上去 會賺比較多

  • 網格區間設定

  • 每隔利潤設高一點, 幣升值的時候才吃的到獲利

    • 派網網格每隔利潤
    • 小幣 每隔利潤最少3%
    • 主流幣 1~3%

      屯幣寶

派網的屯幣寶, 算是簡單持有幣的一種方式(每種幣至少100U)

BETH

beth

ETH2.0質押(詳細)

放貸

平台

  1. bitfinex
  2. crypto
  • 雖然我不知道他保險什麼,但目前保險最多的是這個,上面質押 usdt 年化有到10%也可以考慮
  1. 富利fuly 放貸機器人
  2. FTX
    • 是目前新竄紅的交易所,如果你想美元入金買USDT,可以去註冊來用,這個交易所特色是他的放貸系統,不想扛風險可以把這個交易所當作定存美元的地方

流動性挖礦

  • 搜尋 MMA 造市

  1. TRC20來做交易
  2. 量化交易機器人 如果沒有開槓桿 就不如直接持有就好
  3. 網格 / 期限套利(30%) 兩種交易機器人
  4. 永續合約 如何和現貨掛勾 - 每8小時產生資金費率

期貨交割是用當日收盤價(如果平倉的話)

比喻

錢錢:BTC
網際網路:ETH
硬碟:FIL
5G:SOL
收藏品:NFT
大學:DOt

推薦碼

派網 tn4hgZCa
幣安 237444390
BitoPro 2661190744