Kindle에서 구입한 책을 자동으로 부크로그에 등록
개시하다
갑자기 여러분은 독서를 어떻게 관리합니까?
제가 사용하는 것은 부크로그 서비스입니다.기존에는 독서계를 사용했지만, 책에 기재된 ISBN 코드와 아마존의 아스인 코드로 등록서[1]가 가능하다는 사실을 알게 된 브크로그는 최근에야 브크로그로 옮겼다.
어차피 자동화하고 싶어서 찾아봤어요.그래서 선조들이 같은 일을 고려했기 때문에 참고하면서 하기로 했다.이 기사는 그 소개입니다.
만든 물건
Kindle로 책을 구매할 때 아마존이 메일을 보냅니다.그 메일에서 사용하고 싶은 Assin 코드만 뽑아 구매한 책을 부크로그에 등록했다.처리 로그를 스프레드시트에 등록합니다.
이러한 프로세스는 Type Script로 작성되고 GiitHub로 버전 관리됩니다.GiitHub Actions를 사용하여 Google Apps Script로 자동으로 이동하며 Google Apps Script의 트리거를 통해 정기적으로 실행됩니다.
만들어진 물건의 전체상
소스 코드 여기 있습니다.
프로그램 만들기
다음 몇 가지만 고르세요.
Google Apps Script를 로컬로 사용
Gmail은 Amazon의 메일 주소이기 때문에 사용하기 편리한 Google Apps Script(이하 GAS)를 선택했습니다.
또한 Class를 사용하면 GAS를 로컬에서 처리할 수 있습니다.그 장점은 다음과 같다.
# Clasp をインストール
$ npm install -g @google/clasp
# 確認
$ clasp --version
# ブラウザが開くので、Google アカウントで認証します
$ clasp login
프로젝트 작성
Class CLI를 사용하여 제작합니다.
--type
옵션을 사용하여 프로젝트와 연관된 스프레드시트를 동시에 작성합니다.$ clasp create --title "kindle-booklog-sync" \
--type sheets \
--rootDir ./src
로컬에서 appsscript.json
포함된 모형을 제작하면 OK.GAS로 Gmail 검색
실제
./src
디렉터리에 TS 파일을 만들어 쓰지만 Google 서비스를 사용할 때 GAS를 사용하면 다음과 같이 간단합니다.interface GmailApp {
search(query: string): GmailThread[]
}
const searchEmail = (): GmailThread[] => {
return GmailApp.search("from:[email protected] in:inbox")
}
참고로 메일 검색에서 실제로 Kindle로 책을 구매할 때 보내는 메일 주소는 from으로 지정되었다.Assin 코드로 부크로그에 책을 등록하다
로그인 처리는 필요하지만 이번에는 실제 로그인 처리를 생략했다.
UrlFetchApp.fetch()
이러한 방법으로 HTTP 요구 사항을 보낼 수 있습니다.되돌아오는 값은 HTTPResponse
로 상태 코드와 응답 주체를 얻을 수 있습니다.const uploadBook = (cookies: string[], asinList: string[]): HTTPResponse => {
const url = 'https://booklog.jp/input'
return UrlFetchApp.fetch(url, {
method: 'post',
headers: {
Cookie: cookies.join(';'),
Referer: url
},
payload: {
isbns: asinList.join("\n"),
category_id: 0, // なし
status: 4 // 積読
}
})
}
category_id
는 부크로그의 종류다.그 아이디를 미리 만들어서 지목할 수 있어요. 저처럼 0이면未選択
.status
독서상황입니다.0: 未設定
,1: 読みたい
,2: いま読んでる
,3: 読み終わった
,그래서 먼저 샀어4: 積読
.결과를 스프레드시트에 쓰기
위의 HTTP 응답을 스프레드시트에 저장합니다.
getSheetByName()
방법 매개 변수가 작업표의 이름을 지정했습니다.마음에 드는 이름을 미리 정해 두세요.const log = (asin: string, text: string): void => {
SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('log') // シート名を記載
.appendRow([new Date(), asin, text])
}
실행 후 보니 데이터가 잘 보존되어 있었다.부크로거 확인
부크로그도 확인해 봤는데 등록이 됐어요.듣기에 괜찮다.
GiitHub Action으로 설계
이번에
git tag
를 트리거 프로그램으로 스크립트를 만들었다.길어졌기 때문에 전선을 잘 접어라.env
구역에서 사용하는 환경 변수는 반드시 사전에 GiitHub에 등록해야 한다.リポジトリ TOP
>Settings
>Secrets
는 등록 화면에 들어갈 수 있습니다..github/workflows/deploy.yml
name: Deployment
on:
push:
tags:
- "v*"
jobs:
deploy:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: ['14.16.x']
env:
CLASP_ACCESS_TOKEN: ${{ secrets.CLASP_ACCESS_TOKEN }}
CLASP_CLIENT_ID: ${{ secrets.CLASP_CLIENT_ID }}
CLASP_CLIENT_SECRET: ${{ secrets.CLASP_CLIENT_SECRET }}
CLASP_EXPIRY_DATE: ${{ secrets.CLASP_EXPIRY_DATE }}
CLASP_ID_TOKEN: ${{ secrets.CLASP_ID_TOKEN }}
CLASP_REFRESH_TOKEN: ${{ secrets.CLASP_REFRESH_TOKEN }}
CLASP_SCRIPT_ID: ${{ secrets.CLASP_SCRIPT_ID }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup node
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
cache: 'yarn'
- name: Set env
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Cache node modules
uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-yarn-
- name: Create authentication file
run: |
echo $(cat <<-EOS
{
"token": {
"access_token": "${CLASP_ACCESS_TOKEN}",
"scope": "https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/script.webapp.deploy openid https://www.googleapis.com/auth/script.projects https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/service.management https://www.googleapis.com/auth/logging.read https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/script.deployments https://www.googleapis.com/auth/drive.metadata.readonly",
"token_type": "Bearer",
"id_token": "${CLASP_ID_TOKEN}",
"expiry_date": ${CLASP_EXPIRY_DATE},
"refresh_token": "${CLASP_REFRESH_TOKEN}"
},
"oauth2ClientSettings": {
"clientId": "${CLASP_CLIENT_ID}",
"clientSecret": "${CLASP_CLIENT_SECRET}",
"redirectUri": "http://localhost"
},
"isLocalCreds": false
}
EOS
) > ~/.clasprc.json
- name: Create clasp application file
run: |
echo $(cat <<-EOS
{
"scriptId": "${CLASP_SCRIPT_ID}",
"rootDir": "./src",
"fileExtension": "ts"
}
EOS
) > ./.clasp.json
- name: Get version
id: version
run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/}
- name: Deploy to GAS
run: npx @google/clasp push --force
- name: Add version
run: npx @google/clasp version ${{ steps.version.outputs.VERSION }}
GiitHub Actions가 정상적으로 완료되면 clasp open
완료 여부를 확인합니다.트리거 설정
GAS 디버깅 후 정기적으로 실행되는 트리거를 설정합니다.왼쪽 메뉴에서 트리거를 선택하고 '트리거 추가' 를 통해 트리거를 설정할 수 있습니다.나는 매일 실행한다.
총결산
지금까지 GAS는 브라우저 편집기에 많이 쓰여 있기 때문에 자주 사용하는 편집기는 편집기의 기능을 직접 사용할 수 있고 효율이 높으며 스트레스 없이 실현할 수 있다.또한 Type Script를 사용하여 유형 정의를 수행할 수 있다는 점이 좋습니다.
또 GiitHub에서 관리할 수 있는 곳이 상당히 크다고 생각합니다.(이번 내용은 개인적이지만) 팀 개발에 꼭 필요한 것과 GiitHub Actions를 사용하는 것이 큰 장점이다.
이 책을 읽어 보신 여러분, 이런 독서 관리 방법이 있다면 꼭 알려주세요!
사이트 축소판 그림
각주
브로그 웹 책꽂이 서비스 ↩︎
Reference
이 문제에 관하여(Kindle에서 구입한 책을 자동으로 부크로그에 등록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ysmtegsr/articles/c9077709acb67ff3f1d9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)