知乎能對自己關注的人進行備註嗎?

比如為什麼會關注此人,可以寫回答問題認真,也可以寫是微博上的熟人,還有此人的活躍度,擅長的問題等等,新浪微博就有備註功能的。


…………我好想頂一下這個建議……真的好希望能給關注的人備註啊……不然會忘記為什麼關注他/她......


既然知乎沒有提供這個功能,那就自己寫一個吧。我寫了一個程序可以在本地記錄用戶的備註,在知乎的頁面中,可以通過本地程序讀取用戶的備註並顯示,也能修改備註。

每個用戶都有一個個性網址,這個是唯一的,可以看做ID。在本地,用戶的備註就存在id.txt文件中。在本地跑一個python 3的程序,開一個HTTP服務。在頁面中運行一段JavaScript,遍歷頁面中所有用戶,通過HTTP向python程序詢問用戶的備註,然後顯示在用戶名後面。修改備註時,會向python程序發一個POST,然後python程序會修改用戶對應的備註文件。

下面是用法。注意:運行別人提供的程序和腳本前需要仔細檢查。

安裝python 3,保存server.py,cd到一個空的文件夾里,然後在這個目錄中運行"python3 server.py"。

在知乎的頁面中,運行JavaScript。運行方法有幾種:可以在地址欄輸入"javascript:"後面加上我的腳本,也可以將"javascript: "+腳本放進書籤,想運行時點擊一下,也可以在瀏覽器的控制台(console)里直接粘貼腳本。每次刷新頁面都需要運行一次腳本,因此用書籤的方式運行會比較簡單。如果想讓腳本自動運行,除了寫成瀏覽器擴展,我還沒找到更好的方法。

下面是程序和腳本。

server.py:

#!/usr/bin/python
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse
import os.path
import urllib
import cgitb, cgi

import time

hostName = "localhost"
hostPort = 8000

class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
name = urlparse(self.path).query
remark = name
if os.path.exists(name + ".txt"):
with open(name + ".txt", encoding = "utf-8") as file:
remark = file.read()
self.send_response(200)
self.send_header("Content-type", "text/html")
self.send_header("Access-Control-Allow-Origin", "*")
self.end_headers()
self.wfile.write(bytes(remark, "utf-8"))
def do_POST(self):
ctype, pdict = cgi.parse_header(self.headers["content-type"])
if ctype == "application/x-www-form-urlencoded":
length = int(self.headers["content-length"])
#postvars = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1)
postvars = urllib.parse.parse_qs(self.rfile.read(length).decode("utf-8"))
name = postvars["name"][0]
remark = postvars["remark"][0]
with open(name + ".txt", mode = "w", encoding = "utf-8") as file:
file.write(remark)
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(bytes("已將用戶「" + name + "」備註為「" + remark + "」", "utf-8"))

myServer = HTTPServer((hostName, hostPort), MyServer)
print(time.asctime(), "Server Starts - %s:%s" % (hostName, hostPort))

try:
myServer.serve_forever()
except KeyboardInterrupt:
pass

myServer.server_close()
print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort))

JavaSciprt:

var serverName = "http://localhost:8000/";

function getRequest()
{
var request = false;
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (err2) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (err3) {
try {
request = new XMLHttpRequest();
}
catch (err1)
{
request = false;
}
}
}
return request;
}

function getArray(nl) {
var arr = [];
for(var i = nl.length; i--; arr.unshift(nl[i]));
return arr;
}

function getName(href) {
var str = "people/";
var i = href.indexOf(str);
if (i &< 0) return ""; return href.substr(i + str.length); } function getRemark(people, name) { var request = getRequest(); request.onreadystatechange=function() { if(request.readyState == 4) { var remark = request.responseText; var form = document.createElement("form"); form.action = serverName; form.method = "POST"; form.target = "_blank"; form.style.display = "inline"; var inputName = document.createElement("input"); inputName.type = "text"; inputName.name = "name"; inputName.value = name; inputName.style.display = "none"; form.appendChild(inputName); var inputRemark = document.createElement("input"); inputRemark.type = "text"; inputRemark.name = "remark"; inputRemark.value = remark; inputRemark.style.background = "pink"; form.appendChild(inputRemark); var inputSubmit = document.createElement("input"); inputSubmit.type = "submit"; inputSubmit.value = "更新"; inputSubmit.style.background = "pink"; form.appendChild(inputSubmit); people.parentNode.insertBefore(form, people.nextSibling); } }; request.open("GET", serverName + "?" + name, true); request.send(null); } var people = getArray(document.getElementsByTagName("a")); for(var i = 0; i &< people.length; i++) { var name = getName(people[i].href); if (name.length &> 0
name[name.length - 1] != "#"
people[i].children.length == 0
people[i].className != "member_mention")
getRemark(people[i], name);
}

下面是本頁面中運行腳本的效果截圖,粉色的是顯示的備註,備註默認是用戶的個性網址。覺得不太好看的話,可以改一改腳本。


需要!!!@知乎小管家


我的理解是為了增加用戶的上網黏度,增加頁面停留時間
可問題是,有時我想快速知道我所關注的人的信息,
我想給我關注的人貼上標籤(此處無貶義,決無)以便更好的了解他們,向其學習
但是不能
隨著關注的人的增加,我這個需求已經變得更加強烈了


不能在知乎備註,那麼只能在別處備註知乎名了


其實我覺得知乎ID旁邊跟著的簡介就是這個人的標籤,不少時候是因為這個人寫的簡介而去關注他的。當然,不能排除以後這個人會換ID換簡介。所以可不可以這樣,一般登陸時我不想看到我自己對他的備註,但是當我想不起來這個人是誰的時候,再點開他簡介旁邊的隱藏符號,然後看到我之前對他的備註呢?


我也有這個需求


只在關注列表添加備註,就像每個收藏夾有一個標題之外還有一個描述,而不作為姓名和域名的替代品,我覺得這樣最好。


呵呵,再牛的ID 也會被備註代替。


對這個需求很強烈


關於知乎沒有備註,我的想法:
1.知乎是一個注重內容的網站,不注重用戶關係,因此是否有備註,並不重要。
2.有備註的麻煩:用戶在投票時,人的名字會影響到他投票(比如李開復的答案可能不好,很多人卻投了贊成票)


推薦閱讀:

知乎的「領域」功能你怎麼看?
怎麼看待所謂的精英意識?
知乎存在類似微博「買粉」的操作嗎?
為什麼Quora、知乎這樣的網站直到2009年和2011年才誕生?

TAG:知乎 | 知乎用戶 | 知乎建議反饋 | 知乎用戶體驗 |