如何通過自己編程為瀏覽知乎增加一些比較小眾的功能?

經常沒事刷刷知乎,覺得知乎好好利用的話還是可以有一點點幫助的,如果知乎的設置可以更豐富一點——主要是指信息篩選的選項更多一點,還可以更好用,更好玩一點,但是我覺得知乎本身是不會做出這種看似有用實則符合小眾需求的改進的,題主自己是CS major Freshman,目前只利用java學一些data structure,自己感覺幾乎還沒入門,但是對於自己的需求很有解決的慾望,所以希望各位能指導一下,比如說我想滿足如下需求,僅僅我自己改動自己這邊的東西,不依靠知乎能否實現,如何實現?(需要哪些方面的知識,看哪些書或者公開課,因為我真的是沒太入門沒方向,所以希望大家有時間可以簡單回答一下,謝謝!)

需求如下:

1.在查看首頁動態的時候,只看某些特定用戶的回答,不更新其點贊部分。

2.對用戶進行備註和分類,分類的意思是指可以按類別來看動態,比如我關注了甲乙丙丁,甲乙是歷史,那我可以在默認的時候看四個人的動態,也可以選擇歷史類別只看甲乙分類

3.前一段時間有一個插件,貌似算是針對撕逼的吧,就是拉黑一個人以後,可以完全設置看不到那個人的動態,在看答案的過程中有他的答案也默認去掉,就是完全在知乎遇不到這個人,是如何實現的?

4.按照特定演算法抓取自己未關注領域的內容出現在首頁(知乎有這個功能,但我覺得很差,想自己設計演算法)

PS: 這個問題適合在github上提嗎?如何獲得別人的關注然後一起做這個項目呢?

希望邀請的各位能或多或少指教一下,我完全沒頭緒,並不是要做伸手黨,謝謝啦!


Java 在這裡沒什麼用,你這個需求適合用瀏覽器擴展解決。先學習 JavaScript 和 HTML,重點關注和操作 DOM 有關的部分,然後看 https://developer.chrome.com/extensions/content_scripts(假設你用 Chrome)。


小眾功能我有呀

比如下面這個為知乎添加動圖的功能:

新年裡為知乎添加動圖支持 - 蕭井陌的專欄 - 知乎專欄

GitHub - guaxiao/GZH: Gif for zhihu.com as new year gift

還有一些私有功能包括但不限於

  • 打破複製限制的枷鎖(格式都給我搞沒了)
  • 無圖模式(讓你慢慢曬奶)
  • 夜間模式(不是每個人都有氪金狗眼)
  • 徹底屏蔽不喜歡的話題(真是夠了)
  • 在 timeline 直接點按鈕分享答案
  • 保存點贊、反對、評論過的答案
  • 點擊的頁面歷史紀錄
  • ……

其實開始想寫的時候我是拒絕的,我拒絕,是因為我根本不懂畫網頁,但人蔘難測,我也想不到我一個寫程序的,怎麼要來畫網頁了,於是我只好看了兩篇文檔,就這麼畫出來了。


首先針對前3個需求來說的話,可能Java能做到事並不多,最多做一些錦上添花的功能。你需要學習的是JavaScript來實時改變瀏覽器頁面上顯示的內容,如果只是想完成這個項目的話要學習的也不是很多,無非就是DOM元素的操作,推薦jQuery,簡單易學。

學習完DOM操作的時候,下一步就是分析知乎的Html結構了,可以用Chrome自帶的開發者工具,可以方便的看到實時的Html代碼。比如針對你第一個需求你就會發現特定用戶的回答的點贊這兩種推送的html代碼是不一樣的,然後你就可以按照你的意思去隱藏刪除你不想看到的元素了。

然後就是我的JavaScript代碼都寫好了,怎麼執行?調試階段的話瀏覽器都自帶有控制台你能輸入任意代碼,全部完成之後如果你想把你的東西方便的給別人用,那麼打包成插件是不二選擇,可能你需要學習的就是瀏覽器擴展開發了,當然這個沒什麼難度,半個小時學會基本的沒什麼問題。如果你僅僅是自用,那就不必麻煩了,藉助Tampermonkey這類的擴展就行了,你把代碼放進去,稍稍做點配置就行了。

第四點你要根據演算法來抓取另外一些答案顯示,如果用JavaScript來做也不是不行,就是可能實時抓取的話速度不太理想,可能好點的辦法是在服務端寫一個類似於爬蟲的東西每天定時把這些內容爬好(Java派上用場了),然後用Ajax請求這些內容並顯示到頁面中。

最後假如你把以上的功能都實現了,你就可以利用Java來做一個服務端(事實上第四步的時候已經做了),來保存一些你的資料,比如你拉黑的人等等這些配置信息,這樣也就充分利用了自己的技術嘛。

應該就是這樣了。


出門右拐

Computer Science Stack Exchange

http://segmentfault.com


我來個簡單移動的教程

  • 僅需Stylish,3行搞定第一個需求

首先我們需要分析紙糊的feed流,我們發現每個feed-item都帶了一個data-feedtype屬性

data-feedtype一共有5類

  1. QUESTION_FOLLOW 關注問題

  2. ANSWER_VOTE_UP 點贊回答

  3. ARTICLE_VOTE_UP 點贊文章

  4. ANSWER_CREATE 回答問題

  5. ARTICLE_CREATE 發表文章

知道這個之後就好辦了,我們只需要為其編寫一個簡單的樣式即可

.feed-item[data-feedtype="ANSWER_VOTE_UP"],.feed-item[data-feedtype="QUESTION_FOLLOW"]{
display: none;
}

上面是屏蔽點贊回答與關注問題

  • 2、3等我看完動畫片再寫
  • 點個贊鼓勵下我唄(/▽\=)


關注輪子哥,就可以看美女圖片


參考油猴 Tampermonkey a€¢ Home

會寫js就行啦~


歡迎來到油猴腳本的世界


屏蔽曾博的插件沒人做嗎


誒..大概就是瀏覽器擴展吧...

首先主要學習下JavaScript和DOM的操作,然後需要知道一定的HTML和CSS(非必須)。有一定碼代碼的底子的話,可以去w3school 速成以上幾項。

然後看一看chrome或者firefox的文檔..我只了解過chrome的,https://developer.chrome.com/extensions/getstarted。360由於使用的是chrome的開源項目..所以他的擴展和chrome是相同的,360有一份中文的文檔,英文苦手可以看這個綜述--擴展開發文檔。

最後為了生命健康,學一點jQuery.....

這種根據用戶需求修改頁面元素的擴展主要需要使用localStorage ,用來存儲用戶的設置。比如用戶不想看誰的答案了之類的。

然後需要注意的一點是,如果使用的大部分插件那種彈出一個小窗口讓用戶進行設置,那麼這個localStorage是屬於擴展程序本身的。但是修改頁面元素的JS文件是載入到http://zhihu.com的,所以需要通信把這些數據交給http://zhihu.com。chrome提供了一個chrome.runtime.message的函數,用於頁面間通信。

然後就是使用JavaScript找到指定的DOM然後修改了,該修改修改,該隱藏隱藏。修改元素大概有兩種方法。一種是在頁面尾部插入JavaScript(在manifest中設置「document_end」)然後掃描頁面上你關心的所有的DOM(getElementsByClass?),然後處理每一個DOM。這種方法的缺點大概是需要等到頁面完全載入JavaScript才開始運行,所以會有一種現象就是你不想看到的人會出現一下然後再消失。還有一個缺點就是這種方法檢測不到動態載入進來的DOM。

第二種方法就是在頁面頭部插入JavaScript(在manifest中設置「document_start」),在JavaScript中使用MutationObserve,用來監控頁面上DOM的變化。這個就比較科學了,可以檢測動態載入,也沒有元素先出現再消失的情況。

常用的食用方法大概是

var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.addedNodes) {
[].slice.call(mutation.addedNodes).forEach(function (node) {
如果這個node是個答案
如果作者是我不想看到的
node.hide();
});
}
});
});

observer.observe(document, {
childList: true,
subtree: true
});

大概要用到的就這麼多吧...推薦找個相關的擴展拿來參考一下...github上找一找...或者我印象中.crx直接改成.zip就可以解壓了...


http://greasefork.org

安裝火狐,安裝greasemonkey擴展,自己寫腳本或從這個站西安


Chrome插件iZhihu


推薦閱讀:

零基礎學計算機?
1950x 和7980xe 究竟有多少不同?
人類為什麼要發明電腦硬碟燈?
非科班程序員能得到認可嗎?
為什麼有人心算比計算機還快?

TAG:軟體開發 | 編程 | 計算機 |