分析自己在大學(xué)期間讀過(guò)的書(shū)(三)

前情提要

前一篇文章中,我想明白了:使用 書(shū)名 搜索,得到的豆瓣返回結(jié)果集的第一個(gè)元素其實(shí)就是目標(biāo)書(shū)的信息仓坞。于是,在這一篇文章中腰吟,我將調(diào)用豆瓣 API 得到借書(shū)記錄中所有的書(shū)的讀書(shū)標(biāo)簽无埃,并生成相應(yīng)的詞云。

使用豆瓣 API 根據(jù)書(shū)名搜索書(shū)

搜索豆瓣 API,找到開(kāi)發(fā)者文檔嫉称。豆瓣的 API 看著很清晰侦镇,一下子就找到我需要的接口∨觳海看了一下虽缕,還可以限制返回?cái)?shù)量,于是理所當(dāng)然的蒲稳,將 count 限制為 1 就獲取第一條數(shù)據(jù)了氮趋。

豆瓣圖書(shū)搜索 API

使用 Postman 驗(yàn)證想法

Postman 中輸入搜索 API,加上查詢條件江耀,發(fā)送請(qǐng)求剩胁,查看結(jié)果集。OK祥国,正是我想要的昵观。

使用 Postman 驗(yàn)證 API

查看 tags 對(duì)象,很好舌稀,不但有標(biāo)簽啊犬,還有類(lèi)似權(quán)重之類(lèi)的 count,可能未來(lái)還有更多的用途壁查,目前先不管它觉至。

獲取圖書(shū)所有的 tag

Javascript 代碼實(shí)現(xiàn)獲取所有 tag

寫(xiě)了段簡(jiǎn)單的 JS 代碼,驗(yàn)證是否得到與 Postman 一致的結(jié)果睡腿。結(jié)果语御,出錯(cuò)了……

URL 編碼問(wèn)題

使用 Javascript 請(qǐng)求圖書(shū)信息

挺奇怪的,使用的 URL 跟 Postman 的是一樣的席怪,為什么會(huì)出錯(cuò)呢应闯?
看了看錯(cuò)誤信息,status_code 是 400挂捻,請(qǐng)求有問(wèn)題碉纺?
這個(gè)請(qǐng)求里面只有 URL,那就是 URL 有問(wèn)題刻撒。想了想惜辑,難道是因?yàn)?URL 中的中文嗎?
試著把書(shū)名改為只有英文的 Java疫赎,嘿,成功了碎节。
那么問(wèn)題就在于中文編碼了捧搞。

解決

網(wǎng)絡(luò)上搜索了一下,發(fā)現(xiàn)使用 Javascript 發(fā)網(wǎng)絡(luò)請(qǐng)求,需要使用 encodeURI 將中文編碼之后才可以正常請(qǐng)求胎撇。

第一次遇到 URL 編碼問(wèn)題是大二介粘,后面就陸陸續(xù)續(xù)遇到同樣的問(wèn)題⊥硎鳎可是到現(xiàn)在我也沒(méi)有徹底搞明白這個(gè)問(wèn)題姻采。為什么 URL 不能有中文呢?以后可能還會(huì)遇到同樣的問(wèn)題爵憎,得找個(gè)機(jī)會(huì)徹底搞明白慨亲。當(dāng)然,這是后話宝鼓,且按下不表刑棵。

簡(jiǎn)單地寫(xiě)完了獲取所有 tag 的代碼,截取了部分書(shū)名愚铡,作為測(cè)試數(shù)據(jù)蛉签。執(zhí)行 node getTags.js,成功獲得數(shù)據(jù)沥寥。

速度限制

出錯(cuò)

將測(cè)試數(shù)據(jù)改為完整的書(shū)名列表碍舍,結(jié)果出現(xiàn)了錯(cuò)誤。

很費(fèi)解邑雅,看了一會(huì)兒之后片橡,猜測(cè)是因?yàn)檎?qǐng)求數(shù)量太多了,豆瓣把我的請(qǐng)求給禁掉了蒂阱。

Postman 重新請(qǐng)求驗(yàn)證想法锻全,發(fā)現(xiàn)如我所料。

{
    "msg": "rate_limit_exceeded2: 43.243.12.21",
    "code": 112,
    "request": "GET /v2/book/search"
}

查了 豆瓣的 API 文檔录煤,發(fā)現(xiàn)鳄厌,請(qǐng)求確實(shí)是有限制的。

豆瓣 API 請(qǐng)求限制

我得到的錯(cuò)誤信息是這個(gè)
rate_limit_exceeded 速度限制

解決方法

讀書(shū)記錄中的書(shū)名有兩百多個(gè)妈踊,一次性發(fā)請(qǐng)求的話了嚎,肯定會(huì)超出限制。想了個(gè)方法廊营,就是在每個(gè)請(qǐng)求前隨機(jī)等待若干時(shí)間歪泳,這樣或許可以避免豆瓣的請(qǐng)求限制。

最后的代碼如下

const agent = require('superagent');
const async = require('async');
const bookTitleList = require('./book_title_list');

function sleep(milliseconds) {
  let start = new Date().getTime();
  for (let i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

function random_sleep(second) {
  sleep(Math.floor((Math.random() * second) + 1) * 1000)
}

function requestTags(bookTitle, done) {
  random_sleep(20);
  agent.get(encodeURI(`https://api.douban.com/v2/book/search?q="${bookTitle}"&count=1`))
       .end((err, res) => {
           if (err) {
             console.log(err);
           } else {
             const tag = res.body.books[0].tags;
             done(null, tag);
           }
         }
       );
}

async.map(bookTitleList, requestTags, (err, tags) => {
  tags.forEach(tag => {
    console.log(tag);
  })
});

我還沒(méi)有驗(yàn)證它是否可以正常工作露筒,因?yàn)橄拗茣r(shí)間還沒(méi)過(guò)呢……

未完待續(xù)……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呐伞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慎式,更是在濱河造成了極大的恐慌伶氢,老刑警劉巖趟径,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異癣防,居然都是意外死亡蜗巧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)蕾盯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钟哥,“玉大人蓝角,你說(shuō)我怎么就攤上這事硫豆≡湓ǎ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵装畅,是天一觀的道長(zhǎng)靠娱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)掠兄,這世上最難降的妖魔是什么像云? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮蚂夕,結(jié)果婚禮上迅诬,老公的妹妹穿的比我還像新娘。我一直安慰自己婿牍,他們只是感情好侈贷,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著等脂,像睡著了一般俏蛮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上上遥,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天搏屑,我揣著相機(jī)與錄音,去河邊找鬼粉楚。 笑死辣恋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的模软。 我是一名探鬼主播伟骨,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼燃异!你這毒婦竟也來(lái)了携狭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤回俐,失蹤者是張志新(化名)和其女友劉穎暑中,沒(méi)想到半個(gè)月后壹瘟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳄逾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灵莲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雕凹。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖政冻,靈堂內(nèi)的尸體忽然破棺而出枚抵,到底是詐尸還是另有隱情,我是刑警寧澤明场,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布汽摹,位于F島的核電站,受9級(jí)特大地震影響苦锨,放射性物質(zhì)發(fā)生泄漏逼泣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一舟舒、第九天 我趴在偏房一處隱蔽的房頂上張望拉庶。 院中可真熱鬧,春花似錦秃励、人聲如沸氏仗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)皆尔。三九已至,卻和暖如春币励,著一層夾襖步出監(jiān)牢的瞬間慷蠕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工榄审, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砌们,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓搁进,卻偏偏與公主長(zhǎng)得像浪感,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饼问,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 前情提要 前一篇文章中影兽,因?yàn)槎拱甑?API 請(qǐng)求限制,我無(wú)法一次性請(qǐng)求整個(gè)讀書(shū)記錄的信息列表莱革,于是想到在每個(gè)請(qǐng)求前...
    afaren閱讀 768評(píng)論 0 1
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理峻堰,服務(wù)發(fā)現(xiàn)讹开,斷路器,智...
    卡卡羅2017閱讀 134,704評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,303評(píng)論 25 707
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議捐名。它實(shí)...
    香橙柚子閱讀 23,911評(píng)論 8 183
  • 今天習(xí)慣性的打開(kāi)十點(diǎn)讀書(shū)镶蹋,看了那篇小北寫(xiě)的《一百次感動(dòng)成艘,比不上一次心 動(dòng)》,伴隨著那首鄭國(guó)鋒的《角落里的陽(yáng)光》贺归,心...
    肉松媽閱讀 523評(píng)論 2 3