书籍管理DIY

写在前面

以下所有内容基于iOS作成。

其实事情非常简单,一是最近买书略多觉得有必要规整一下;二来之前有过同一本书买两次的事故。所以就想能不能像书局一样,把所有书通过手机扫描条形码的形式来录入,然后在电脑端集中管理。

手机扫描条形码录入并不困难,问题是iOS上同时支持中日英文书籍检索的App简直是凤毛麟角。

APP篇

英文类
 Goodreads背靠亚马逊好乘凉,英文书籍检索加社交阅读。可惜只要踏出英文书领域半步,都分分钟被教做人。

日文类
 因为日本人有阅读习惯的较多又喜欢系统化,所以总体上在书籍管理App的开发上面做的相当不错。只不过基本和英文类存在同样的问题,出了国门就被虐成渣。

中文类
 中文市场有不少选择,其中对中日英文支持最好的应该是晒书房。更难能可贵的是一些台湾和日本新近出版的书籍皆有对应。是枝裕和在2016年出版的新书《映画を撮りながら考えたこと》竟然都可以做到自动识别,着实让我惊喜不已。之所以弃用则是因为一大部分日文的专业类书籍不能被识别。所以没有特殊需求的人可以结束本文的阅读,直接跳去下载页面了。

正谓,山穷水尽疑无路,柳暗花明又一村:
 利用Workflow和Evernote管理书籍,

上面提到原Po的主要思路是通过各大公司开放的API来获取图书信息,然后将图书信息导入到笔记类软件,实现来自诸客户端的管理需求。引用金星老师的台词就是:完美!

为了实现这一目的,首先需要在手机上安装Workflow,2015 Apple Design Awards 受赏作,可以通过定制的方式来缩短工作流程提高效率。

接下来是查找图书类网站提供的API。

API篇

中文类
 建议直接使用《利用Workflow和Evernote管理书籍》中的workflow:ISBN存书, 或者利用豆瓣图书API

日文类
 最好用的自然是国立国会图书馆NDL,相当于我们的国图。简单说,没有在NDL找不到的日文书就是了。但是NDL的问题在于提供的检索结果页面是以xml格式输出,而workflow似乎只支持json格式。

英文类
 印象中Goodreads有提供API。

普适类
 首先不得不提到就是卖书产业的龙头老大亚马逊图书的API了。毕竟我大部分的书都是在中亚和日亚上买的,理论上不应该存在图书信息不全的情况。另外,被墙的可能性较低。但没有选择亚马逊的原因在于,抛开使用亚马逊API需要提前申请Product Advertising API,Access Key ID,Secret Access Key三件套手续繁杂之外,它和上文中提到的国立国会图书馆一样,只支持xml格式的输出。想要实行电脑端书籍管理的朋友可以一试。

谷歌图书的API提供了json格式的输出结果,可以匹配workflow。不需要申请API Key就可以使用,虽然每天会有查询数不超过100条的限制。但是它的问题在于:第一,必须会科学上网!!!;第二,谷歌图书的API查询结果几乎不包含出版社信息;第三,谷歌图书偶尔会出现图书已经收录但是API查询结果为空的情况。很多人在StackOverflow上提到了这一情况,但是现在貌似还没有得到解决。至于谷歌图书和亚马逊图书收录的数量方面,日本网友做了一个比较,可以参考。

综上所述,权衡利弊,最后还是决定使用谷歌图书的API。

如何定制Workflow

首先,既然是定制,肯定要给自己的藏书清单起一个独一无二的名字。在图中显示Title Search和Note Title位置进行修改并保证前后一致。

当然,也可以自定义将书目信息存储在苹果自带的备忘录里面,暂时不支持Onenote。

其次,书目信息获取网址变更为
 https://www.googleapis.com/books/v1/volumes?q=isbn:<你设计的变量>
 (当然了,你也可以沿用我现有的设置)

下面还有一些具体的变量定义,基本只是在原Po的设置上进行了微调。可以直接使用,不再赘述。

至此,大功告成。。。

才怪!如果这么容易实现的话,那这篇文章还有什么存在的价值…

完成上述修改之后,出现了程序可以正常运行,但是无法获取图书信息的问题。

以《知识分子的背叛》一书为例,网页显示的代码

{
"kind": "books#volumes",
"totalItems": 1,
"items": [
{
"kind": "books#volume",
"id": "gr08AAAACAAJ",
"etag": "yZ9KLFJ2hLw",
"selfLink": "https://www.googleapis.com/books/v1/volumes/gr08AAAACAAJ",
"volumeInfo": {
"title": "知識人の裏切り",
"authors": [
"バンダ,J."
],
"publishedDate": "1990",
"industryIdentifiers": [
{
"type": "ISBN_10",
"identifier": "4624932056"
},
{
"type": "ISBN_13",
"identifier": "9784624932053"
}
],(后略)

如上图,代码中详细显示了书名,作者和出版日期等信息,但是运行程序后却无法获取。

经过多次试错(-_-!),以及比对豆瓣API提供的格式发现,造成这一问题的原因在于:
与豆瓣API将图书信息直接提供在根目录不同,谷歌图书将图书的信息放在了一个叫volumeinfo的子目录下面(其实我也不知道目录这个词用的对不对)。所以需要在原Po的基础上添加一道工序。如下:

这回,就真的大功告成了。

我的Workflow

以及

写在后面

接下来的课题是考虑如何能把通过Kindle购买的电子书的信息也按照这种格式导出…

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.