Drafts5からScrapboxに追記するAction
Drafts 5からScrapboxの特定のページにテキストを追記できるアクションの作り方。javaが使えるのでtextwellと同じ手法でいけるはずなのですが・・・ ActionMakerは、無料ユーザーでもアクションが登録できる仕組み
なのでまず、これをインストールする。
iPhoneとかで上のページを開いてActionMakerの登録はこちらのリンクを踏めばOK
あとは、本文テキストを取得して、それをURLに追加して、openするコードを書けばいい。
本文は、上のページにも例があってtext = editor.getText();で取得可能だし、URLを開くのは、app.openURL(url);でいける。簡単。
goScrapboxという名前で書いてみる。
code:firstgoScrapbox.js
goScrapbox
text = editor.getText();
url = homeUrl +"?body=" + encodeURIComponent(text);
app.openURL(url);
editor.focus();
code:goScrapbox.js
goScrapbox
text = editor.getText();
//https:をsbporter:にすればPorter for Scrapboxでひらきます
url = homeUrl +"?body=" + encodeURIComponent(text);
app.openURL(url);
editor.focus();
※homeUrl(緑色のhtts...の部分)は、追記したいページのURLをぶっ込んでください。
これをDraftsの中に書いて(コピペして)、ActionMakerを起動すれば、アクションが登録される。
code:goScrapbox.jsの部分は不要なので注意。
これで固定されたページへの追記はOK。
homeUrlの中身を動的に変えれば、今日のページみたいなところにも追記できる。
Next Step:新規ページを作るバージョン
1行目がタイトルになればなおよし
空白なら当日の日付時刻ついたりするのも素敵
ページ内にDraftsってリンク入ったりしたら最高
新規作成のテスト
code:goScrapbox.js
goScrapbox
text = editor.getText();
lines = text.split(/\r\n|\r|\n/);
const pagetitle = lines0 //空白時の処理がいる url = homeUrl + encodeURIComponent(pagetitle.trim()) + "?body=" + encodeURIComponent(text);
app.openURL(url);
editor.focus();
※このままだと、一行目が本文にも含まれる。
含めたくない場合は、linesを.shift()して、joinしてtextに。
ページ内にDraftsというリンクを入れる場合はlines.unshift([draft])を追加。
一行目を含めないバージョン(ベータ2)2019/8/6
code:goScrapbox.js
goScrapbox
text = editor.getText();
lines = text.split(/\r\n|\r|\n/);
const pagetitle = lines0 //空白時の処理がいる lines.shift();
text = lines.join('\n');
url = homeUrl + encodeURIComponent(pagetitle.trim()) + "?body=" + encodeURIComponent(text);
app.openURL(url);
editor.focus();
Next Step
選択を提示して動作を選ぶ
固定ページに追記
日付ページに追記
ページを新規作成
まず選択肢の表示
code:selectbox.js
selectbox
p = Prompt.create();
p.title = "Index";
for(i=0; i<list.length; i++) p.addButton(listi);//mapで書き換えられそう p.show();
s = p.buttonPressed;
editor.focus();
表示された
https://gyazo.com/4b328368de113e6b5c06fbcb961b5d63
sに応じて処理を変えればいい。
Next Step:組み合わせる
code:mix.js
goScrapbox
const tag = "";
const itemList = [];
itemList.push('「どうせ記事にしきれないメモたち」の供養祭');
itemList.push('新規');
p = Prompt.create();
p.title = "?";
for(i=0; i<itemList.length; i++) p.addButton(itemListi); p.show();
s = p.buttonPressed;
text = editor.getText();
lines = text.split(/\r\n|\r|\n/);
url = homeUrl + encodeURIComponent(s) + "?body=" + encodeURIComponent(text);
}else if (s == itemList1){ url = homeUrl + encodeURIComponent(lines0.trim()) + "?body=" + encodeURIComponent(text + tag); }
app.openURL(url);
editor.focus();
これで分岐ができた。
あとは、日付のページを作るやりかた。
now()で現在時刻を取得して、その中身を使う。
code:fullversion.js
goScrapbox
//プロジェクトのURLを設定。
//https:をsbporter:にすればPorter for Scrapboxでひらきます
const tag = "";
const itemList = [];
itemList.push('「どうせ記事にしきれないメモたち」の供養祭');//追記したい固定ページのタイトルを入力する
itemList.push('新規');//一行目をタイトルにしてページを作る
itemList.push('日記');//その日の日記ページに追記(存在なければ新規作成)
p = Prompt.create();
p.title = "?";
for(i=0; i<itemList.length; i++) p.addButton(itemListi); p.show();
s = p.buttonPressed;
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth()+1;
const date = now.getDate();
const hours = now.getHours();
const minutes = now.getMinutes();
const seconds = now.getSeconds();
text = editor.getText();
lines = text.split(/\r\n|\r|\n/);
url = homeUrl + encodeURIComponent(s) + "?body=" + encodeURIComponent(text);
}else if (s == itemList1){ title = lines0 == "" ? "無題ノート" : lines0.trim() url = homeUrl + encodeURIComponent(title) + "?body=" + encodeURIComponent(text + tag);
}else if (s == itemList2){ diaryTitle = year + "/" + month + "/" + date;
url = homeUrl + encodeURIComponent(diaryTitle) + "?body=" + encodeURIComponent(text + tag) ;
}
app.openURL(url);
editor.focus();
これでとりあえずは3種類の記録パターンが使える。
それにしてもコードの書き方が非常にダサい。
tagはそのまま文末に入るのでtag = "\n[Drafts]"とか書けば改行が入ると思う。
日記の日付表記は、diaryTitle = year + "/" + month + "/" + date;の部分を変えればOK
時間(分/秒)まで含めれば、毎回新しいページが作成されることになる
Next Action
終わったらdraftsに戻ってくる方法とか、、、urlスキームだとxcallbackだと思うのですが
コールバックの仕組みがよくわからないので、まずサンプルを探す。
まずは、URLを開くだけのテスト
code:goandback.js
goandback
app.openURL(homeUrl);
ひらくことができたが、戻ってくる書き方が不明。
code:goandback
goandback
const homeUrl = 'sbporter://scrapbox.io/rashitamemo/?x-success=drafts5:';
app.openURL(homeUrl);
こういう書き方ではだめだった。
ruu-embo.icon
iOS純正のショートカット(旧workflow)に「draftsのアクションを実行」という項目があるのでこの辺ゴニョゴニョするのも良いかも(試行錯誤中)
となると、ショートカットでテキスト入力画面を作ってそこからSBに飛ばせると、通知画面からdraftsも経由せずに好きなページに飛ばせるので最終的にはこっちも作りたい
らしたさんの作ってくれた方法も毎日活躍してます。ありがとうございます。
rashita.icon存外に、自分でも活用していますw
ruu-embo.icon 2019/06/07 7:15
● iOSアプリの「ショートカット」とdraftsを使ってテキスト入力画面からSBに飛ばす(作成中)
「ショートカット」のメニューからで
テキスト入力→テキスト取得→クリップボードにコピー
→draftsで新規ページ作成→
アクション実行
(1.クリップボードからペーストの実行アクション(追加)
+2らしたさんのスクリプトからテキスト定義の一行目を抜く)
drafts内でアクションを2つかましていますので無料版の人はショートカットが二行程必要かも
たぶん2つのアクションは綺麗にまとめられるはず
通知センターに入れると便利
(問題点)実行時、draftが立ち上がったあとに手動でいちどショートカットに戻らないとアクションが継続しない。
なんでかな? このへんの知識が必要?↓
「ショートカット」のsafariのアクションで「webページでjavascriptを実行」というのがあるのでこれを使えばdrafts外してもいけるのかな?
私のへぼ知識ではこの辺までです どなたかヘルプ御願いします
クリップボードからペーストのスクリプト
code:paste clipboard
var text = app.getClipboard();
editor.setSelectedText(text);
コードとかの基本知識が無いと事例から法則を推定するしかないのがつらみ。
余談だが元work flowを「ショートカット」と名付けたのは大馬鹿野郎だと思う。
全くweb検索がまとまらず集合知にならないので。
「https:をsbporter:にすればPorter for Scrapbox」よさげなので試したのですが、SB開くのときにporterを開きますか?という許可画面がでる(safariだと自動貼り付け)
https://gyazo.com/f78bb77e108580f5ecc2beb25fd72cda