小技チョコレート

ちょっとした小技を紹介するだけのブログです。

コマンドプロンプトから、Dynalistの特定の項目の下位に記入するPythonスクリプト

コマンドプロンプトに入力したテキストをDynalistの特定の項目(行)の下位へ記入するPythonスクリプトを作ったので、コードと使い方を書いておきます。*1

別記事にGUIバージョンもあります。


〈目次〉


機能

  • Terminal(端末)に入力したテキストが、Dynalistの特定の項目(行)の下の階層に記入されます。
  • 一度に記入できるのは1行のみで、改行はできません。
  • Markdownを記入できます。
  • ハッシュタグを記入できます。

実行例

実行するとこのような状態になります。

f:id:ichbin:20190901183734p:plain

hoge」と書いてある行の下の階層に記入するよう設定した例です。「ふがふが」が記入内容です。

必要なもの

Pythonスクリプトを実行できる必要があります。

設定の手順

テキストエディタで、新しいファイルに下記のコードを記入します。

import json
import requests
import webbrowser

#ドキュメントのid=書き込む対象のドキュメントのid
file_id='YOUR_FILE_ID'

#親ノードのid=書き込みたい内容の1階層上位に相当する項目(行)のid
parent_node_id='YOUR_PARENT_NODE_ID'

#Secret token
token='YOUR_SECRET_TOKEN'

content=input('>>')

dict = {
    'token'  :  token,
    'file_id' : file_id,
    'changes' : [
        {
              "action": "insert",
              "parent_id": parent_node_id,
              "index": 0,
              "content": content
        }
    ]
}

response = requests.post('https://dynalist.io/api/v1/doc/edit', json.dumps(dict), headers={'Content-Type': 'application/json'})

print (response.text)

#親ノードにズームした状態でDynalistを開く
#webbrowser.open('https://dynalist.io/d/' + file_id +'#z=' + parent_node_id)

#ドキュメントを開く
#webbrowser.open('https://dynalist.io/d/' + file_id)

ドキュメントのidの記入

Dynalistにログインしたうえで、書き込みたい対象のドキュメントを開き、そのドキュメントのidをコピーします。
すなわち、そのドキュメントを開いている状態のURL(例:https://dynalist.io/d/KWJ-NGiPrpbDyjX4fPiJ3YK9)のうちの/d/よりも後ろの部分をコピーします(この例ではKWJ-NGiPrpbDyjX4fPiJ3YK9がドキュメントのidです)。
なお、このときのURLに#が含まれている場合は、#以降はドキュメントのidに含みません。

コピーした文字列を、上掲のコードのYOUR_FILE_IDのところに記入(上書き)します。

親ノードのidの記入

このスクリプトを使って書き込みたい内容の上位(1階層上位)に相当する項目(行)のことを親ノードといいます。
すなわち、下記の例ではBやCの親ノードがAであり、Dの親ノードはCとなります。

  • A
    • B
    • C
      • D
  • E

このスクリプトを使って書き込みたい内容の親ノードに相当する行(親ノードにしたい行)の行頭にマウスカーソルを置いて、“Zoom in”のアイコン(虫眼鏡アイコン)を押すか、もしくはその行でCtrl+]のショートカットキーを叩くと、その行に“Zoom in”した状態になります。

f:id:ichbin:20190901183606p:plain

f:id:ichbin:20190901183618p:plain
(“Zoom in”した状態)

その状態でのURLは末尾が#z=E2YF50ihKrH8Oi8oSa3HvPxjのようになっています。そこから#z=を取り除いた文字列(この例ではE2YF50ihKrH8Oi8oSa3HvPxj)が、親ノードのidです。これをコピーします。

コピーした文字列を、上掲のコードのYOUR_PARENT_NODE_IDのところに記入(上書き)します。

Secret tokenの取得と記入

Developer - Dynalistをウェブブラウザで開き、“Your API secret token is: ”の下に表示されている長い文字列をコピーします(下記の画像でボカしている部分です)。*2

f:id:ichbin:20190804143052p:plain

コピーした文字列を、上掲のコードのYOUR_SECRET_TOKENのところに記入(上書き)します。

記入位置の選択(先頭 or 末尾)

このスクリプトを使って書き込みたい内容を、親ノードの下位のうちの先頭に記入するか、それとも末尾に記入するかを選択できます。
下記の例ではBが「先頭」にあたり、Dが「末尾」にあたります。

  • A(親ノード)
    • B
    • C
    • D

上掲のコードでは、先頭に記入するように指定してあります。
末尾に記入するよう変更したい場合は、上掲のコードの後半にある"index": 0,のところを"index": -1,に書き換えます。

ブラウザの挙動を設定する

このスクリプトを使ってDynalistに書き込みを行った時に、それと同時にブラウザでDynalistを開くかどうかを設定できます。
デフォルトでは、ブラウザでDynalistを開かないようにしてあります。
書き込んだ内容の親ノードにズームした状態でDynalistを自動で開きたい場合は、上掲のコードの#webbrowser.open('https://dynalist.io/d/' + file_id +'#z=' + parent_node_id)の行頭の#を取り除きます。
書き込んだ内容を含んでいるドキュメントを開きたい場合は、上掲のコードの#webbrowser.open('https://dynalist.io/d/' + file_id)の行頭の#を取り除きます。*3

記入し終えたら、上掲のコードを保存します。ファイル名はdynalist.pyのように拡張子を.pyとします。

使い方

コマンドプロンプトpython dynalist.pyと実行。

f:id:ichbin:20190804143320p:plain

下の行に>>という記号が表示されるので、そこに続けて、Dynalistに記入したい内容を入力し、Enterキーを押します。

f:id:ichbin:20190901183700p:plain

Dynalistへの記入が正しく行われれば、{"_code":"Ok","new_node_ids : ["**********"] }というメッセージが表示されます。これで完了です。

f:id:ichbin:20190901183715p:plain

Dynalistを開くと、このように記入されています。

f:id:ichbin:20190901183734p:plain
(「hoge」の行が親ノードのとき、その下の階層に記入される)

資料

上掲のスクリプトは、こちらに示されている仕様に従って作りました。

関連記事

DynalistのInboxにコマンドプロンプトから記入するスクリプトもあります。

*1:DynalistのInboxとして指定してある位置へコマンドプロンプトから記入したい場合は、別のスクリプトがあります。

*2:この文字列を、他人が読める状態にしてはいけません。

*3:ただし、ドキュメント全体が開かれるのではなく、〈そのドキュメント内で一番最近にズームした行〉にズームした状態で開かれる場合があります。Dynalistの仕様だと思います。

Scrapboxにて当日の日記用ページを作るPythonスクリプト(当月・前日・翌日へのリンク付き)

Scrapboxにて当日の日記用ページ(デイリーページ)を作るPythonスクリプトを作りましたので、コードと使い方を書いておきます。


〈目次〉


機能

  • Scrapboxにおける、当日の日付をタイトルとするページを作ります。
    • タイトルとなる日付の書式は、デフォルトでは2019-09-01のようにYYYY-MM-DDという形です。書式は変更可能です。
  • 当月・前日・翌日への内部リンクが自動で記入されます。
  • 本文として自動で記入したい文字列を指定することができます。

実行例

本記事で紹介しているスクリプトを実行すると、このようなページが作成されます。

f:id:ichbin:20190901104719p:plain

2019年9月1日に実行した場合の例です。
タイトルの下に〈当月・前日・翌日への内部リンク〉が記入され、その下には、特定の文字列(この例では「#日記」というハッシュタグ)を自動で記入させることができます。

必要なもの

  • Pythonスクリプトを実行できること。
  • ウェブブラウザが使えて、そのブラウザでScrapboxにログインしていること。

設定の手順

下記のコードの6行目のYOUR_PROJECT_URLのところを、書き込みたいScrapboxのプロジェクトURL(https://scrapbox.io/○○○/の○○○の部分)に書き換え、ファイル名をtoday.pyなどのように拡張子を.pyとして保存。

import datetime
import urllib.request
import webbrowser

###プロジェクトURL###
project_url='YOUR_PROJECT_URL'

now=datetime.datetime.today()   #当日の日付を取得
yesterday=now - datetime.timedelta(days=1)  #当日から1日マイナス=前日
tomorrow=now + datetime.timedelta(days=1)   #当日に1日プラス=翌日

###日付の書式###
#デフォルトではYYYY-MM-DD
#年・月・日の区切り方や並び順を変えたり、
#「0埋め」をしないよう変更したいときなどは、
#この下の4行の各行末の、丸カッコ内を書き換える。
#例:("%Y年%m月%d日") とか ("%Y/%m/%d") など
title = datetime.datetime.today().strftime("%Y-%m-%d")  #当日かつページタイトル
month=datetime.datetime.today().strftime("%Y-%m")  #当月
y=yesterday.strftime("%Y-%m-%d")  #前日
t=tomorrow.strftime("%Y-%m-%d")  #翌日

###〈当月・前日・翌日へのリンク〉の書式###
#デフォルトの並び順は、当月→改行→翌日→当日の日付→翌日。
#不要なものは除去可能。
#全体が不要ならばdates=''とだけ書いておく。
dates='['+month+']\n['+y+'] | '+title+' | ['+t+']'

###本文に自動で記入する文字列###
#〈当月・前日・翌日へのリンク〉とは別に、
#自動で記入したい文字列があれば、
#contents=''のクォーテーションの間に書く。
#改行は\nと記入。Scrapbox記法も記入可。
#ただし、パスワードや個人情報などの「他人に見られると困る情報」は記入しないことを推奨します。
contents='#日記'

dates_encode=urllib.parse.quote(dates)
contents_encode=urllib.parse.quote(contents)

###ページのレイアウト###
#'?body='より後ろの3つの変数は、
#左から順に、〈当月・前日・翌日へのリンク〉→〈改行2回〉→〈本文に自動で記入する文字列〉
#という順番になっており、これらの順番を変えれば、
#各々の記入される位置が変わる(左側にあるものが上になる)。
#改行したいところはurllib.parse.quote('\n')と書く。
webbrowser.open('https://scrapbox.io/' + project_url + '/' + title + '?body=' + dates_encode + urllib.parse.quote('\n\n') + contents_encode)

使い方

PCのコマンドプロンプトにてpython today.pyと実行。

すると、その日の日付(2019-09-01など)をタイトルとするこのようなページがブラウザで開かれます。

f:id:ichbin:20190901104719p:plain

書式やレイアウトを変更する方法

上掲のコード内にコメントとして説明を記入してありますので、それを参考に適宜書き換えれば、日付の書式やレイアウトを変更できます。

関連記事

本記事のスクリプトで行うのと同様のことを、ScrapboxUserScriptで実行することもできます。

当日や前日の日付をタイトルとするScrapboxページを「ブラウザで開くだけ」のスクリプトもあります。

Scrapboxにて〈前日の日付をタイトルとするページ〉を開くPythonスクリプト

Scrapboxにて〈前日の日付をタイトルとするページ〉をウェブブラウザで開くPythonスクリプトを作ったので、コードと使い方を書いておきます。


〈目次〉


機能

  • Scrapboxにおける、前日の日付をタイトルとするページをブラウザで開きます。
    • タイトルとなる日付の書式は、デフォルトでは2019-08-21のようにYYYY-MM-DDという形です。書式は変更可能です。

必要なもの

  • Pythonスクリプトを実行できること。
  • ウェブブラウザが使えて、そのブラウザでScrapboxにログインしていること。

設定の手順

下記のコードのYOUR_PROJECT_URLのところを、書き込みたいScrapboxのプロジェクトURL(https://scrapbox.io/○○○/の○○○の部分)に書き換え、ファイル名をyesterday.pyなどのように拡張子を.pyとして保存。

import datetime
import webbrowser

project_url = 'YOUR_PROJECT_URL'
now = datetime.datetime.today()
yesterday = now - datetime.timedelta(days=1)    # days=1 のところの数値を2にすれば一昨日、3にすれば3日前の日付で開かれるようになります。
y = yesterday.strftime("%Y-%m-%d")    #年・月・日の区切り方や並び順を変えたり、「0埋め」をしない形に変えたいときは、この行を書き換えます。
webbrowser.open('https://scrapbox.io/' + project_url +'/' +  y)

使い方

PCのコマンドプロンプトにてpython yesterday.pyと実行。

すると、その日の前日の日付(2019-08-21など)をタイトルとするページがブラウザで開かれます。

関連記事

Dynalistの背景色・文字色・アイコンの色を変えるためのCSSの書き方

ブラウザの拡張機能であるStylus(Chrome版 / Firefox版)を使って、Dynalistの背景色を変えるためのCSSの書き方を紹介します。
ヘッダー(ページの最上部)やサイドバーを含めて、通常見えているエリアの全ての色が変わります。*1

Stylusの使い方については、こちらの記事をご参照ください。

なお、Dynalistの有料版を利用している場合は、本記事で紹介しているCSSを、DynalistのカスタムCSSの入力欄にそのまま入力するだけでもよいだろうと思います。その場合はStylusは不要です。


〈目次〉


スクリーンショット

下記に示すCSSを全て適用すると、このような外観になります。

f:id:ichbin:20190830101859p:plain
(背景色として#4767ABを、フォントの色として#dddを用いた場合)

CSS

色のサンプルとして#4647AB(背景色)、#ddd(文字色とアイコンの色)が記入してあります。これらを、ご自身の着色したい色に書き換えてから適用してください。

背景色・文字色・アイコンの色

/***背景色***/
.AppHeader,
.is-desktop .LeftPaneContainer-nav,
.is-desktop .LeftPaneContainer-navItem,
.is-desktop .LeftPaneContainer,
.is-desktop .Pane,
.is-desktop .Pane-header,
.is-desktop .popup-message-banner,
div.page,
div.mod-app,
div.AppContainer,
.DocumentTools-overlay,
.search-ui-container,
.search-ui-document-title-container
{
    background: #4767AB
}

/***フォントの色***/
/*本文*/
body {
    color: #ddd
}

/*ヘッダー(画面の最上部)*/
.AppHeader {
    color: #ddd
}

/*サイドバーのヘッダー(タイトル)*/
.is-desktop .Pane-header {
        color :#ddd
}

/*サイドバー内のドキュメントペインでの、
各ドキュメントの名前*/
.pane-item-header {
    color: #ddd
}

/***アイコンの色***/
/*ヘッダーのアイコン*/
.AppHeader-icon {
    color: #ddd
}

/*サイドバーの左上に固定されている、
ドキュメントとブックマークのアイコン*/
.is-desktop .LeftPaneContainer-navItem {
    color: #ddd
}

/*サイドバーを開いた際に最上部にあるアイコン
および、ドキュメントペインでのドキュメントのアイコン*/
.is-desktop .Pane-headerToolbarItem,
.pane-item-icon {
    color: #ddd
}

/*画面右上にある、
検索アイコンとView optionのアイコン*/
.DocumentTools-icon {
    color: #ddd
}

ヘッダー・サイドバー・検索アイコン・View optionのアイコンには、デフォルトでは縁に影が付いていますが()、それを消したい場合は下記のCSSも適用します。

header.AppHeader, /*ヘッダー*/
.is-desktop .LeftPaneSlidebarContainer, /*サイドバー*/
.DocumentTools-overlay /*画面右上に表示される検索アイコンとView optionのアイコン*/
{
    box-shadow: none;
}

その他の細かい部分

サイドバーにて選択中のアイコンやドキュメントを示す部分は、デフォルトでは背景色とは別の色が適用されていますが、その部分の背景色も併せて変えたい場合は、下記のCSSも適用します。

/*サイドバーでドキュメントペインを選択しているときの、
ドキュメントアイコンの背景色*/
.is-desktop .LeftPaneContainer-navItem.is-active, .is-desktop .LeftPaneContainer-navItem:hover
{
    background: #4767AB
}

/*サイドバーのドキュメントペイン内で、
選択中のドキュメントの背景色*/
.pane-item.DocumentItem.is-open > .pane-item-header
{
    background: #4767AB
}

サイドバーと本文部分とを区切っている線の色を変えたい場合や、線を消したい場合は、下記のCSSを適用します。

.is-desktop .LeftPaneSplitter::after {
    border-right:1px solid #ddd    /*線の色を#dddにする場合*/
}
.is-desktop .LeftPaneSplitter::after {
    border-right:none    /*線を消す場合*/
}

ハッシュタグの文字色や、日時記法、コード記法の使用箇所などの色を変えたい場合は、下記のCSSから必要な部分だけを抜き出して、着色したい色に書き換えてから適用して下さい。

/*ハッシュタグの文字色*/
.node-tag {
    color: #ddd
}

/*日時記法の使用箇所*/
.node-time {
    background: #6686CC;        /*背景色*/
    border: solid 1px #ddd    /*枠線*/
}

/*コード記法の使用箇所*/
.node-inline-code {
    background: #6686cc;
    color: #c7254e
}

/***検索結果***/
/*Flat searchでの各検索結果の位置を示す表示*/
.flat-search-breadcrumb-item,
.flat-search-breadcrumb-delimiter {
    color: #ddd
}

CSSの適用先の指定

Dynalistの全てのドキュメントに適用したい場合は、「ドメイン上のURL」を選んでdynalist.ioと記入するか、もしくは「次で始まるURL」を選んでhttps://dynalist.io/と記入します。

f:id:ichbin:20190829202728p:plain

Dynalistにおける特定のドキュメントにのみ適用したい場合は、「次で始まるURL」を選んで、適用したいドキュメントのURLを記入します。

f:id:ichbin:20190829202831p:plain

文字が見えにくい部分がある場合の対処法

この記事で紹介している方法を使ってDynalistの外観を変えると、場合によっては、画面内の一部の箇所で背景色と文字色が同じような色になってしまい、文字が見えにくくなることがあるかもしれません。その際の対処法としては、次のようにするとよいと思います。

  • 文字色を暗い色(黒っぽい色)にしたい場合は、設定画面のThemeの項目で"Default"を選択する。

f:id:ichbin:20190830084502p:plain

  • 文字色を明るい色にしたい場合は、設定画面のThemeの項目で"Dark"を選択する。

そのようにすれば、文字色と背景色の明るさの差が大きくなるので、文字が見やすくなると思います。

(備考)Userstyles.orgからのCSSのインストール

Userstyles.orgに公開されているCSSは、ブラウザにStylusをインストールしたうえで“Install Style”のボタンをクリックするだけで適用できます。

f:id:ichbin:20190830202208p:plain

*1:ただし、画面の各所でポップアップ/ドロップダウンするメニューや、色付きラベルの使用箇所などの背景色は変わりません。