動機
以前只有留解法,之後要看的時候很難一次回想起,這些到底要幹嘛 所以就研究怎麼打api,抓資料再跑腳本
API
- JSON
https://leetcode.com/api/problems/algorithms/
- 回傳所有問題的id與slug
- slug就是查詢問題的key
- Graphql
https://leetcode.com/graphql
- 拿詳細資料,有很多東西,可以用dev tools的network去看
- 這裡我們要問題的資訊,所以大概像
{"operationName":"questionData","variables":{"titleSlug": "two-sum"},"query":"query questionData($titleSlug: String!) { question(titleSlug: $titleSlug) { content topicTags { name } }}"}
bash
這次bash最坑的地方有兩個
- 用斷行做array分界
- 像是title會有空白,
"two sum"
,到bash array會變成,["two, sum"]
- 所以要這樣
IFS=$'\n' topics=($(jq '.topics[]' leetcodes/$id.json))
- 但這樣就沒辦法用local,不知道是不能用在local,還是
IFS
應該放在local後面(但這樣也很怪不是)
- sed的append後馬上插入斷行
- 不能用
sed -i "/<!--more-->/a \nhello world
,會變成nhello world
- 這其實是處理插入多空白的方式
sed -i "/<!--more-->/a \ hello world
,會變成hello world
- 要用下面的方式,但是不能縮排,縮排會被算進去
- 另外還有
$'\nhello world'
,在$
後面的字串就是c-style,但是因為是single quote,所以不能用var替換QQ
- 另外還有
# \\後面就是什麼都可以用了
sed -i "/<!--more-->/a\\
\n## Problem\n${content}\n" $1
另外記一下sed插入string到某一行,之後、之前、尾巴的方式
# Using sed and the pattern described:
sed '/192.168.1.2/s/$/ myalias/' file
sed '2s/$/ myalias/' file
#Append line after match
sed '/\[option\]/a Hello World' input
#Insert line before match
sed '/\[option\]/i Hello World' input