知乎能對自己關注的人進行備註嗎?
比如為什麼會關注此人,可以寫回答問題認真,也可以寫是微博上的熟人,還有此人的活躍度,擅長的問題等等,新浪微博就有備註功能的。
…………我好想頂一下這個建議……真的好希望能給關注的人備註啊……不然會忘記為什麼關注他/她......
既然知乎沒有提供這個功能,那就自己寫一個吧。我寫了一個程序可以在本地記錄用戶的備註,在知乎的頁面中,可以通過本地程序讀取用戶的備註並顯示,也能修改備註。
每個用戶都有一個個性網址,這個是唯一的,可以看做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年才誕生?