AlfredのWorkflowで、移動したい日付入りのScrapboxページを開く


前回、こちらの記事でAlfredのworkflowを使って日付いりのscrapboxページを開く方法を書きました。
[AlfredのWorkflowを使って、今日の日付入りのScrapboxページを開く](https://qiita.com/hoi_my_/items/fdfcf8cae469ef2b9a96)
今回はこのWorkflowを使い、移動したい日付入りのScrapboxページを開けるようにしたいと思います！


# 完成のイメージ
![958d4249758f96502330bb82a1cdfaf3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/26748548-7c19-cb2d-fe87-071dbf8c6abe.gif)


# 注意
- この方法は**Alfred4**を基準に作成されました。
- **Powerpack user**ではない場合、Workflow機能はご利用できません。

# 手順

## 1. 空のWorkflowを作る
AlfredのPreference(command + ,(カンマ))に入り、左側のサイドバーから「Workflows」をクリックします。
その後、左下の「＋」ボタンから「Blank workflow」を選択し、空のworkflowを作ります。
![76f563031535e826ded78ae3ff8b2b9d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/56b4f0b7-4027-e07a-7464-032667861a69.gif)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/eb86c611-34cb-52d4-a7c0-0cddfe55d9e9.png)


## 2. Workflowを実行させるキーワードを設定する
先ほど作ったworkflowをクリックすると、右側に空のキャンバスが現れます。
キャンバスを右クリックし、**「Inputs」→「Keyword」** を選択します。
Alfred検索窓からこのWorkflowを呼び出す時に使うキーワードを設定できます。

**※「Argument Required」に設定した理由**

- workflowの目的が「移動したい日付を引数としてもらい、その日付をタイトルの形式と合わせたScrapboxページを開く」だけなので、input argumentの入力を必須にする必要があります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/6c625d53-4fdf-08c8-ece0-dbf0ba4ae6d3.png)
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/3330c1d6-dc4e-3519-bf65-e81240e957bf.png)


## 3. 実行するスクリプトを作る
同じく、キャンバスを右クリックし「Action」→「Run Script」をクリックします。
下の画像のような画面が出ると、「Script」の部分に以下のコードを入力します

```terminal:alfred_script.sh
/usr/bin/python opendiary.py $1
```
入力し終わったら「Save」を押しましょう。

※今回はLanguageを「/bin/bash」にして、shell script経由で`opendiary.py`のPython Scriptを実行する予定です

![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/f69222c0-93b1-ffe4-9ee1-b97f42e1f1eb.png)



## 4. 今日の日付入りのScrapboxページを開くPython Scriptを作成する]
python scriptを書く時に、こちらのWorkflow libraryがよく使われます。
https://github.com/deanishe/alfred-workflow
今回のworkflowもこのライブラリを活用して作ります。

### 4-1. Workflowにlibraryをインストール
作成中のworkflowを右クリックして「Open in terminal」クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/1859b3e7-50a6-d263-6c29-6485fb731c29.png)
現れたターミナルwindowに、以下のコマンドを打ち、実行させます

```terminal:command
pip install --target=. Alfred-Workflow
```
下記のようなMessageが出たら、インストール完了です。

```terminal:インストール完了メッセージ
Collecting Alfred-Workflow
Using cached Alfred-Workflow-1.40.0.tar.gz (92 kB)
Using legacy 'setup.py install' for Alfred-Workflow, since package 'wheel' is not installed.
Installing collected packages: Alfred-Workflow
Running setup.py install for Alfred-Workflow ... done
Successfully installed Alfred-Workflow-1.40.0
```

確認のため、「Open in terminal」と同じ方法で、「Open in Finder」をクリックします。
すると、このようにライブラリがインストールできたことを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/f10db812-56e7-d686-a666-5b512e3631f4.png)


### 4-2. 実行するPythonファイルを作成
cotEditor（テキストエディターならなんでもOK）から新しい`.py`ファイルを作成します。
今回はファイル名は`opendiary.py`にします。
空のファイルができたら、先ほどライブラリをインストールしたフォルダに`todays_diary.py`を置きます。
以下のようになればOKです。
![444.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/4d3993bf-a3e8-cd31-a9a2-bac306811f17.png)


### 4-3. Python Scriptの中身を入力する
`opendiary.py`の中身を入力します。
今回は**「`yyyy/mm/dd 作業ログ`というタイトル形式を持つページがGoogle Chromeで開く」**コードを作成します。

```python:opendiary.py
# encoing utf-8
# -*- coding: utf-8 -*-
		
import sys
import webbrowser
from datetime import datetime, date, timedelta
from workflow import web, Workflow
		
def main(wf):
  	args = sys.argv[1] # input
  	dcnt=int(args)

	project = 'my-project'#scrapboxプロジェクト名
	url1 = 'https://scrapbox.io/'
	url2 = '_%E4%BD%9C%E6%A5%AD%E3%83%AD%E3%82%B0'#'_作業ログ'のutf-8 coding ver.

  	day = date.today().weekday()
  	if dcnt != 1:
  	    od = datetime.strptime(str(args), "%Y%m%d").date()
  	else:
  		if day == 0:
  			if dcnt == 1:
  				od = date.today() + timedelta(days=dcnt)
  			if dcnt == -1:
  				od = date.today() + timedelta(days=-3)
  		elif day == 4:
  			if dcnt == 1:
  				od = date.today() + timedelta(days=3)
  			if dcnt == -1:
  				od = date.today() + timedelta(days=dcnt)
  		else:
  			if dcnt == 1:
  				od = date.today() + timedelta(days=dcnt)
  			if dcnt == -1:
  				od = date.today() + timedelta(days=dcnt)
  	url_date = od.strftime("%Y/%m/%d")
	url = url1 + project + '/' + url_date + url2
	chrome_path = 'open -a /Applications/Google\ Chrome.app %s'#Google Chromeで開くためのパス設定
	webbrowser.get(chrome_path).open(url)
	
	wf.send_feedback()

if __name__ == '__main__':
	wf = Workflow()
	sys.exit(wf.run(main))
```

## 5. キーワードとPython Script実行を繋ぐ

マウスで2つのアイコンをつなげればOKです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/cda86159-88c8-f036-cd79-0ec7bcb159eb.png)


これで完成です。

毎回scrapboxから遡らなくても、日付さえ知っていれば簡単なキーワードの入力だけでページが開けるのでかなり便利です。