動機

以前只有留解法,之後要看的時候很難一次回想起,這些到底要幹嘛 所以就研究怎麼打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最坑的地方有兩個

  1. 用斷行做array分界
  • 像是title會有空白,"two sum",到bash array會變成,["two, sum"]
  • 所以要這樣
    • IFS=$'\n' topics=($(jq '.topics[]' leetcodes/$id.json))
    • 但這樣就沒辦法用local,不知道是不能用在local,還是IFS應該放在local後面(但這樣也很怪不是)
  1. 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