Skip to content
This repository has been archived by the owner on May 25, 2022. It is now read-only.

API List #1

Open
misaka10055 opened this issue Jul 29, 2019 · 43 comments
Open

API List #1

misaka10055 opened this issue Jul 29, 2019 · 43 comments

Comments

@misaka10055
Copy link
Collaborator

misaka10055 commented Jul 29, 2019

我们应该会需要的API:

作品相关

  • search
    Method:POST
    输入:

    • title: String, 作品标题,如果为空则返回所有结果
    • tags: List, 搜索的Tags
    • limit: Int, 搜索的结果数,默认25
    • page: Int, 第几页的内容,默认0
    • filtered: List, 不包含的分类,默认为空
    • minimum: Int, 最低评分

    输出:至多 limit 个查询结果,JSON格式,每个结果包含作品的基本内容(缩略图,名字,分类,评分等)

  • getFullTagList
    输出:一个包含所有Tag 的列表,JSON 格式,具体数据待定。

  • getDetail
    输入:Hash ID
    输出:作品的详细信息(包括上面提到的所有内容,以及作品资源链接 (IPFS)),JSON 格式

  • getComments
    输入:gid
    输出:对于一部作品的Comment List
    // 这个可以整合进listDetail,不过我感觉分开来会清爽一些。

  • addRating
    输入:gid, rating: Int
    // 添加一个评分(需要登录)

  • addComment
    输入:gid, comment:String
    // 添加一个评论(需要登录)

  • addToFavorite
    输入:gid
    // 把一个作品加入到收藏列表中(需要登录)

上传相关

  • uploadWork
    输入:一个表单,包括作品的所有内容。

账号相关

  • login
    // 登录

  • logout
    // 登出

  • register
    // 注册

  • changePassword
    // 修改密码

以上四个如果用第三方的认证服务的话可能不需要。

  • getFavorite

    输入:limit
    输出:至多 limit 个查询结果,JSON格式,每个结果包含作品的基本内容(缩略图,名字,分类,评分等)
    // 获取你的收藏列表

  • getUploaded
    输入:limit
    输出:至多 limit 个查询结果,JSON格式,每个结果包含作品的基本内容(缩略图,名字,分类,评分等)
    // 获取你的上传列表

目前就想到这么多,其他的想到了再加。

@r1235613
Copy link
Collaborator

在驗證系統不明的狀態下,下面挺難處理的,先處理只讀的部分吧

@r1235613
Copy link
Collaborator

@zjdavid2 你DC叫啥,我們討論一下

@misaka10055
Copy link
Collaborator Author

@r1235613 David Dai。我刚在我们Thread上发了条消息应该很容易可以找到

@r1235613
Copy link
Collaborator

@zjdavid2 我们Thread是什麼?

@r1235613
Copy link
Collaborator

r1235613 commented Jul 31, 2019

@zjdavid2 請求搜索規則,像是artist: abc 之類的檢索方式要支援到什麼程度
或是請前端分開送給我們

@linonetwo
Copy link
Contributor

搜索的话,要不就类似你在 #8 给的格式,给出:

{

"title": "ruined",
"tags": {
    "language": {
      ["english"]
    },
    "character": {
      ["tomoko kuroki"]
    },
    "femail": {
	    [
		  "beauty mark",
	      "bikini",
	      "dark skin",
	      "anal"
		]
    }
  }
}

这样你那边用起来方便吗?

我之前是见过直接用 ElasticSearch 的搜索 JSON 格式的。

@r1235613
Copy link
Collaborator

r1235613 commented Jul 31, 2019

@linonetwo 這個格式不符合json規範……能修正嘛。
如果是下面這個Request Format 檢索起來會挺方便的。
另外檢索請求會經由go發過來,還是純前端的ajax?主要是CORS是否需要設定的問題。
另外網域怎麼辦,我持有52uu.info與lolita.work,這兩個是我的Domain(www草

{
  "title": "ruined",
  "tags": {
    "language": [
      "english"
    ],
    "character": [
      "tomoko kuroki"
    ],
    "femail": [
      "beauty mark",
      "bikini",
      "dark skin",
      "anal"
    ]
  },
  "uploader": "edam1234"
}

@linonetwo
Copy link
Contributor

linonetwo commented Jul 31, 2019

应该是前端发起的搜索,或者其他第三方发起,总之是要允许前端跨域请求的。

domain 我去买一个便宜的 rehentai.xxxx 吧(xxxx是啥取决于哪个便宜 hh)

那个 JSON 我随手改的,没注意到格式……的确应该是这样:

{
  "title": "ruined",
  "tags": {
    "language": ["english"],
    "character": ["tomoko kuroki"],
    "femail": ["beauty mark", "bikini", "dark skin", "anal"]
  },
  "offset": 50,
  "count": 50
}

带分页

@misaka10055
Copy link
Collaborator Author

前端要自行分词吗?
我一般搜索的时候不会按照标准的Tag形式来,而是直接搜”English tomoko kuroki full color” 这样的。这个交给前端分割可能有点困难。
要不就把识别不出的全部丢到 title 里面去,然后我们再拿Title 做全文搜索。

@r1235613
Copy link
Collaborator

r1235613 commented Aug 1, 2019

前端有辦法做成這樣子嗎?
把各標籤分開來讓使用者輸入
註解 2019-08-01 143634

@GooeyNyan
Copy link

前端有辦法做成這樣子嗎?
把各標籤分開來讓使用者輸入
註解 2019-08-01 143634

json 传数组就可以,只是这不利于用户使用的感觉。感觉我们需要分词功能来把标签分开。

@linonetwo
Copy link
Contributor

linonetwo commented Aug 1, 2019

我试试看做一个 Controlled Natural Language Interface ,就像 Google 推荐搜索那样:

屏幕快照 2019-08-01 下午1 49 10

反正肯定是得有 API 拿到可用 tag 列表,缓存在前端。

@misaka10055
Copy link
Collaborator Author

嗯,我感觉大部分的人不会去像填表一样去搜索。还是比较习惯直接输入几个关键词

@misaka10055
Copy link
Collaborator Author

@linonetwo 这个会不会比较难做?有现成的框架可以用吗?

@r1235613
Copy link
Collaborator

r1235613 commented Aug 1, 2019

這個似乎要瘋狂Ajax我們的flask,可能要考慮效能

@linonetwo
Copy link
Contributor

linonetwo commented Aug 1, 2019

所以可以在刚开始就预加载所有 tag 的 list,然后只在前端搜索。毕竟只是提示当前输入的 tag 可以怎么变成标准 tag 形式,方便分词。

分了词就能用 #1 (comment) 这个 API 来搜索了。

@misaka10055
Copy link
Collaborator Author

有人统计过这个List总共有多长吗?

@linonetwo
Copy link
Contributor

反正 2M 以内都能接受,这毕竟是一个图片站,图片都很大的。

还有在它没加载完成的时候,可以先用一个前端内置的常用 tag 列表来顶着。

@misaka10055
Copy link
Collaborator Author

我觉得这个OK

@GooeyNyan
Copy link

跑了一下,80W 那个 metadata 导出的所有 tag 是 1.5M。如果是出现次数 100 次以上是 70K(gzip 之后 30K)。
其实我觉得比较可扩展的解法还是起个 ES,做个 tag 的搜索引擎。
( 1.5M 我感觉还是大了)

@r1235613
Copy link
Collaborator

r1235613 commented Aug 1, 2019

@GooeyNyan 我沒有掌握到80W的那個set,能給我一下嗎?

@misaka10055
Copy link
Collaborator Author

80W 就是gdata那个Collection 吧?

@r1235613
Copy link
Collaborator

r1235613 commented Aug 1, 2019

@zjdavid2 那個不是我壓上去的嗎……(如果下面這個的話
難道我花了一個下午在找我自己傳上去的東西嗎QQ
註解 2019-08-01 203956

@Minasemaoking
Copy link

Minasemaoking commented Aug 1, 2019

如果給使用者一種制式query條件呢?
欄位不用太多,畢竟這個功能可能開發者覺得方便,但是使用者反而無法認同。

(我認為熊貓的使用者都是很猴急的傢伙,過多的欄位會讓他們理智下降導致操作困難)

我覺得像樓上一樣一個搜尋欄, 直接用'&' 符號連接keyword (female&color&milf)
(會要求用&做連結是因為有些tag中間是包含空格的)

這個kayword在後端用&判斷切開後,直接搜尋符合作品名與擁有該tag的作品,返回結果
我知道java 在mongoDB中檢索可以這樣做,但是目前後端應該flask,還是說目前這個是前端cover,不太清楚query可不可以這樣塞複合條件。

不然就是直接把tag拆開來,分keyword, male, female, artist 這樣讓使用者分開檢索

@GooeyNyan
Copy link

是的,我偏向于方便使用者。

生活都那么累了,还是在这方面无脑一点吧。

手打 & 我都觉得挺麻烦的了,或者可以用个 选择器 来分隔开。

@linonetwo
Copy link
Contributor

就用 antd 那个 https://ant.design/components/select/ 了。

屏幕快照 2019-08-02 上午12 39 43

@GooeyNyan
Copy link

GooeyNyan commented Aug 1, 2019

就用 antd 那个 https://ant.design/components/select/ 了。

屏幕快照 2019-08-02 上午12 39 43

可以加个 <OptGroup /> 分一下组

@linonetwo
Copy link
Contributor

有了: exxhentai/rehentai-frontend#3 (comment)

@misaka10055
Copy link
Collaborator Author

@linonetwo @GooeyNyan 后端提供的 Tag 列表,如果按照在作品中出现的频率排列(而不是字母排序),对你们有帮助吗?

@linonetwo
Copy link
Contributor

我觉得没必要啦,一般就是直接搜想要的 tag 了,还有出现频率高的不一定是用户喜欢的……

@Minasemaoking
Copy link

Minasemaoking commented Aug 3, 2019

我覺得你想要的tag列表,應該是tag推薦系統那種吧?
參考已有tag去推薦未來使用者有可能增加的tag,這就是資料探勘跟機器學習的範疇了
python 我知道有現成訓練model的code ,如果要用的話就只需要設計處理流程,提高精確度

當然單純的出現頻率應該沒辦法cover 這麼多類型的作品
頂多就是統計出來給使用者看有趣的而已
不過真的列出來,也挺有趣的。

@linonetwo
Copy link
Contributor

其实我觉得不需要复杂的推荐系统,直接把用户收藏夹里的 gallery 包含的 tag 列在顶端不就好啦?

@Minasemaoking
Copy link

@linonetwo 我覺得這是個不錯的主意

@misaka10055
Copy link
Collaborator Author

OK
那么格式怎么样最方便呢
A.
["english", "tomoko kuroki", "beauty mark", "bikini", "dark skin", "anal"]
像这样的List格式
B.
["language:english", "character:tomoko kuroki", "female:beauty mark", "female:bikini", "female:dark skin", "female:anal"]
像这样的List格式

C.

{
  "language": ["english"],
  "character": ["tomoko kuroki"],
  "female": ["beauty mark", "bikini", "dark skin", "anal"]
}

像这样的Dict<String, List> 格式

D.
或者其他的

哪个对于前端开发最方便呢?

@linonetwo
Copy link
Contributor

@zjdavid2 c 这个最好,结构化程度高。

@linonetwo
Copy link
Contributor

现在我在做上传,需要:

  1. uploadWork 添加新作品的所有元信息,包括 https://exhentai.org/upload/managegallery?act=new 会有的那些字段,还有作品文件夹的 ipfs hash 、 每个单张图片的 ipfs hash 列表
  2. 给某个已有的 gallery 补上作品文件夹的 ipfs hash 、 每个单张图片的 ipfs hash 列表

这两个 API,现在有了吗?

@misaka10055
Copy link
Collaborator Author

第二个我今天尝试下弄出来。

@r1235613 我们服务器你准备怎么部署?UWSGI + Nginx 吗?

@r1235613
Copy link
Collaborator

r1235613 commented Aug 6, 2019

@zjdavid2 放Docker吧,这样比较不会跟其他专案冲到,前面在挂个Traefix当SSL代理?

@misaka10055
Copy link
Collaborator Author

@zjdavid2 放Docker吧,这样比较不会跟其他专案冲到,前面在挂个Traefix当SSL代理?

没问题。我今天研究一下这个怎么弄。

MongoDB 也放Docker 里吗?

@r1235613 如果你有时间的话可以帮忙写下Dockerfile 吗?

@r1235613
Copy link
Collaborator

r1235613 commented Aug 6, 2019

使用映象:https://github.com/tiangolo/uwsgi-nginx-flask-docker

FROM tiangolo/uwsgi-nginx-flask:python3.7

COPY ./app /app
WORKDIR /app

RUN pip install -r requirements.txt

@misaka10055
Copy link
Collaborator Author

使用映象:https://github.com/tiangolo/uwsgi-nginx-flask-docker

FROM robpco/nginx-uwsgi-flask-mssql:python3.6

COPY ./app /app
WORKDIR /app

RUN pip install -r requirements.txt

哇 这个好棒。居然有现成的Dockerfile 可以直接用

@misaka10055
Copy link
Collaborator Author

@r1235613
2个小问题:
FROM robpco/nginx-uwsgi-flask-mssql:python3.6

  1. 这里的镜像使用了nginx作为反向代理。如果我们用 Traefix (Traefik?) 是不是不需要nginx?
  2. 这里的镜像使用了 MS SQL,但是我们是用MongoDB 的,可能不通用?

@r1235613
Copy link
Collaborator

r1235613 commented Aug 7, 2019

@zjdavid2

  1. Nginx 不是反向代理,他是處理uwsgi協議的,用以分配作業。
    我記得Traefik不支持uwsgi,我用他是因為他易與Docker結合提供SSL反向代理。
    另,uwsgi應該不能跨Docker,所以我們還是需要Nginx轉成TCP/IP Base的協議才能走Docker NAT出來。
  2. 感謝你的提醒,我複製錯專案了,那個Dockerfile是我一個有用到mssql的專案的……跟我貼出來的repo不一致,已修正。
    另外回答你的問題,不會有問題,只是MS SQL需要在Linux環境下配置一個有點麻煩的驅動,所以才會另外包一個Docker Image

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants