你用過印象筆記嗎?一個奇葩需求的另類玩法

當閱讀一些網上的文章時,我經常會發現一些有價值的段落或句子,於是我收集起來做了個網站:喬木記錄

如何快速收集整理這些摘抄的句子呢?下面跟大家分享下我的訣竅。

手機上的解決方案

如果用手機閱讀,複製句子後通過Workflow自動存到印象筆記。

什麼是Workflow?

這是一個iPhone上非常值得購買的一款自動化處理軟體,少數派網站有相當完善的教程:關於 Workflow 的文章 - 少數派

實現的效果是這樣:

手機選中複製一段內容,下拉划出iPhone的Widget,點擊自己創建的「從剪貼板保存到印象筆記」。

然後每天都會產生一條以日期命名的筆記,當天粘貼的所有內容都會在這條筆記中。

使用Workflow避免了需要頻繁切換到印象筆記,手動新建筆記,然後長按粘貼的複雜操作。

而選擇印象筆記的好處就是支持所有平台同步,隨時隨地查看,異常方便。

電腦上的解決方案

如果在電腦上閱讀,以往就是就複製粘貼句子到Mweb這個牛逼的Markdown編輯器中,抽空整理後發布。

關於Markdown和Mweb的介紹看這篇 知乎專欄

對於電腦上的複製粘貼操作來說,其實已經很簡單了。

但是:「懶是無止境的」。

我的設想是:「如果複製一句話後,然後按個快捷鍵就實現類似於手機上Workflow的功能就好了。」

於是我開始尋找解決方案。

雖然印象筆記客戶端也支持快捷鍵新建筆記,但是每次都新建一條筆記,不能把內容都放到一起,況且切換窗口或彈出的快捷輸入框,都需要花費一些操作,閱讀的快感容易被打斷。

後來我發現,印象筆記居然提供有API,可以根據自己需要定製開發。

怎麼做呢?

首先去印象筆記開發者平台申請一個token,其實就是密碼,不能誰都可以訪問你的印象筆記內容吧。

Token申請地址:

Developer Tokens - 印象筆記開發者

第一段里有兩個鏈接地址,一個叫沙盒,一個叫產品。

其實申請的Token可以通用,我們點擊「產品」鏈接:

歡迎回來

然後會要求登錄你的印象筆記賬號,之後出現如下界面:

點擊 「Create a developer token」,出現如下界面:

複製生成的 Developer Token,類似於:

S=s3:U=1d3c1:E=16081a4df70:C=15929f3b2d0:P=1cd:A=en-devtoken:V=2:H=f540d0359f7e0d5c52235eb1c19c9122

把這段東西保存好,關了頁面就消失了,不然下次還得生成。

印象筆記不虧是國際化產品,提供了各種語言的開發SDK。

對PHP稍微熟悉些,於是點擊安裝PHP的SDK,然後發現跳轉到Github網站。

evernote/evernote-cloud-sdk-php

按照教程,一步步操作,打開電腦上的終端輸入:

curl -sS getcomposer.org/install | php

php composer.phar require evernote/evernote-cloud-sdk-php

因為都是國外的網站,獲取代碼的速度有些慢,請耐心等待。

等下載安裝完成,本地會出現一個叫「vendor」的文件夾,這裡面都是SDK文件。和文件夾同級的位置新建一個文件,比如叫 evernote.php

下面就可以開始寫代碼了:

<?phpnn//引用Evernote的PHP APInrequire dirname(__FILE__)./vendor/autoload.php;nn// 時區設置,貌似不設置也行。ndate_default_timezone_set(Asia/Shanghai);nn// 讀取剪貼板導出的txt文本內容。 Mac下可以命令行運行pbpaste獲取剪貼板里的內容。n// 比如 pbpaste > /tmp/evernote.txt 可以把剪貼板里的內容導出到臨時目錄下叫做evenote.txt的文件中。n// 用於寫入筆記中。n$content = file_get_contents("/tmp/evernote.txt");nn// 個人使用開發者token就可以,申請地址:Developer Tokens - 印象筆記開發者n// 類似於 S=s3:U=1d3c1:E=16081a4df70:C=15929f3b2d0:P=1cd:A=en-devtoken:V=2:H=f540d0359f7e0d5c52235eb1c19c9122nn$token = token;nn// 不做沙盒測試,直接讀寫真實的evenote筆記,所以設置為false。n$sandbox = false;nn// Evernote在中國叫印象筆記,對應的API地址不同,這裡需要設置為truen$china = true;nn// 創建一個Evernote讀寫客戶端對象。n$client = new EvernoteClient($token, $sandbox, null, null, $china);nn// 遍歷讀取你的印象筆記(evernote)賬號里所有筆記本名稱、GUID,還有對應的筆記本類型。nfunction getNotebookGuid($client){n $notebooks = array();n $notebooks = $client->listNotebooks();n foreach ($notebooks as $notebook) {n echo "nnName : " . $notebook->name;n echo "nGuid : " . $notebook->guid;n echo "nIs Business : ";n echo $notebook->isBusinessNotebook()?"Y":"N";n echo "nIs Default : ";n echo $notebook->isDefaultNotebook()?"Y":"N";n echo "nIs Linked : ";n echo $notebook->isLinkedNotebook()?"Y":"N";n echo "nn";n }n}nn// 運行後獲取自己所有evernote筆記本的GUIDngetNotebookGuid($client);nn// 單條筆記名稱,結構例如:「20161225閱讀記錄」,就是當天的日期組合上「閱讀記錄」,可以根據自己喜好設置nn$noteName = Date("Ymd")."閱讀記錄";nn// 以筆記名去某個筆記本中搜索。n$search = new EvernoteModelSearch($noteName);n$notebook = new EvernoteModelNotebook();n$notebook->guid = 9e965c09-5045-4909-ad78-bf95a5bbc09d;nn//最大返回結果條數,因為筆記名字格式不會重名,所以結果只需要返回一個就夠。n$maxResult = 1;n$results = $client->findNotesWithSearch($search, $notebook, $maxResult);nn// 如果搜不到結果,說明沒有這條筆記,立馬使用剪貼板里的內容創建一條以日期命名的筆記。nnif($results == null){n // 創建筆記讀寫模型對象n $note = new EvernoteModelNote();n $noteName = Date("Ymd")."閱讀記錄";nn // 設置筆記名稱n $note->title = $noteName;nn // 設置筆記內容,純文本格式就行,所以使用PlainTextNoteContent對象,這樣比較簡單。n // 可以查看官方文檔,還有別的API,實現添加圖片、附件等等高級格式。n $note->content = new EvernoteModelPlainTextNoteContent($content);nn // 設置筆記Tag標籤,可根據自己需要修改。n $note->tagNames = array(喬木閱讀記錄, 摘抄);nn // 因為閱讀摘要想放到對應的單獨的筆記本中,所以這裡需要設置存入的筆記本。n $notebook = new EvernoteModelNotebook();n $notebook->guid = 9e965c09-5045-4909-ad78-bf95a5bbc09d;n // 如果不需要存入指定筆記本則替換上面兩行為:$notebook = null;n // 這樣筆記會寫入默認的筆記本。nn // 把設置好的筆記寫入 「印象筆記」 n $firstInsert = $client->uploadNote($note, $notebook);nn // 這裡可以讀取寫入的筆記名稱,還有其他參數,請參考官方文檔。n $title = $firstInsert->title;nn // 我個人需求是每天一條筆記,用於存放今天看到的好句子或段落。n echo "The first item of today, notes name is: ".$title;nn}else{nn // 讀取第一條搜索結果的筆記GUID。n $guid = $results[0]->guid;nn // 獲取這條筆記的數據,是一個對象結構。n $res = $client->getNote($guid);nn // 把筆記的內容讀出來,並轉化為字元串。n $str = (string)($res->content);nn // 原本筆記內容是XML結構,我只需要提取其中的筆記純文本部分。n $pattern = /<en-note>(.*)</en-note>/is;nn preg_match_all($pattern, $str, $matches);nn // 獲取之前筆記的內容。n $oriStr = $matches[1][0];nn // 把本次剪貼板里的內容賦值給$newlinen $newline = $content;nn // 舊的筆記內容,加上兩個換行符號,然後再加上新的剪貼板里的內容。n $newStr = $oriStr."<br /><br />".$newline;nn // 創建新的筆記對象n $note = new EvernoteModelNote();n $noteName = Date("Ymd")."閱讀記錄";n $note->title = $noteName;n $note->content = new EvernoteModelPlainTextNoteContent($newStr);n $note->tagNames = array(喬木閱讀記錄, 摘抄);nn // 替換舊的筆記內容為新的筆記內容,變相實現在一條筆記中增加新的內容。n $updated = $client->replaceNote($client->getNote($guid), $note);nn echo "Append content: ".$newline;n}nn?>n

科學上網困難的朋友,完整包含SDK的實現代碼這裡:

Coding | 代碼託管,項目管理,WebIDE,演示部署,開啟雲端開發模式,讓開發更簡單

代碼雖然有了,但工作並沒有結束。

我們需要讓這段代碼在按下某個快捷鍵時自動運行,這就需要Mac OSX系統自帶的工具Automator。

它可以打包腳本成為一個應用程序。

打開Automator後新建一個「工作流程」文稿,點擊資源庫->實用工具->運行 Shell腳本(雙擊)

輸入如下內容:

#! /bin/bash

LANG=en_US.UTF-8 pbpaste -txt > /tmp/evernote.txt & /usr/local/bin/php /pathto/evernote.php

請注意,LANG=en_US.UTF-8 很重要,否則會造成亂碼。

pbpaste是Linux類系統自帶的命令,可以讀取剪貼板里的數據。然後使用 「> /tmp/evernote.txt」 在/tmp目錄下輸入生成一個叫做evernote.txt的文件。

而「/usr/local/bin/php」 是本機的PHP程序的位置,」/pathto/evernote.php」 是我們剛才寫的PHP文件的位置。

整個腳本的意思是:

先把剪貼板里的內容存入臨時文件夾下的evernote.txt文件中,然後執行PHP文件evernote.php

然後把這個文件存儲到「應用程序」文件夾里,文件格式修改為「應用程序」,文件名為「save2evernote」。

然後再新建一個Automator文件,選擇「服務」文檔格式。

點擊左側的實用工具,然後找到「開啟應用程序」後雙擊。

修改「服務」收到 下拉菜單為「沒有輸入」,因為不需要輸入任何東西,然後保存,名字為「save2evernote」。

下面開始設置快捷鍵,打開Mac OSX中的系統偏好設置,點擊鍵盤->服務。

找到我們剛才創建的服務「save2evernote」,勾選上後設置一個自己喜歡的快捷鍵,如下圖所示。(Ctrl+ALt+Command+V)

至此,終於一切都搞定了,以後遇到好段落和句子,只需要選中按下Command+C,然後再按 Ctrl+ALt+Command+V 就自動貼到印象筆記了。

總結

通過這麼一番折騰發現:

  1. 學會一門編程語言很重要,可以不用求人開發自己需要的功能,推薦PHP、Python或JavaScript(因為有Nodejs)

  2. 盡量讓一些工作變得自動化,可以提升效率、節省時間,讓工作和生活更美好。

作為產品經理,我在編程方面是新手,但很享受自己能開發做出小工具的感覺,歡迎熱愛編程的朋友們加我微信:vista8

推薦閱讀:

github菜鳥初體驗(1)——下載/提交代碼
上雲連載1:一堵牆引發的回國之路

TAG:印象笔记 | 自学编程 | MacOSX使用技巧 |