[技術噗]是時候研究加減表符了
latest #31
掰噗~
5 years ago
有這種事!?
Mr.Zombie
5 years ago
啊...啊...
小爛【趕啊趕文去!】
5 years ago @Edit 5 years ago
雖然噗浪有Plurk API
但這裡純粹研究如何利用簡單JS以tampermonkey或書籤達成加減表符

取得用戶表符:/EmoticonManager/getUserEmoticons
param: {token}
刪表符:/Emoticons/remove
param: {token, hash_id}
hash_id是指表符圖片的hash

至於token可以透過top.SiteState.getToken()取得
立即下載
先在這裡擺幾張表符方便隨時測試
當游標移到留言時(右上角顯示時間/編輯),留言的噗會多出class=show-response-manager
所以利用以下可以一口氣抓取滑鼠移到的留言內的所有表符網址,再從網址直接取得表符的hash_id:
document.querySelectorAll('.show-response-manager .text_holder img.emoticon_my')
點開表符列表後,點選群組後會多出class=current,因此可以利用以下取得現時選擇的表符群組id:
$('#emoticon-tabs li.current[emo-group-type="custom"]').attr('emo-group-id')

有群組id就可以利用getUserEmoticons去抓取所有表符hash_id(用css selector來抓可以)
好了寫完表符群組刪除了
刪除後表符列表不會立即更新,要麼重新整理頁面,要麼就呼叫下面這個(沒理解錯的話)
window.EmoticonCustom.load(true);
加表符:/Emoticons/add
param: {form_token, hash_id, keyword, group_id}
注意keyword可以空掉,會自動產生keyword=emoXXX
group_id可以空掉,表符會加到預設第一組別(即是愛心)

建立新群組:/EmoticonManager2/newGroup
param: {token}
response json除了ok=true,還有g=group-id

所以把表符加入新群組的步驟就是:
1)呼叫newGroup,取得group-id
2)呼叫add並填入正確group-id
雖然成功新增了但總覺得數字不太對勁
https://images.plurk.com/4NoBtdRtDeVpJpTuut2dpo.png
https://images.plurk.com/5IqiteLUFNXIEX4XW4PP55.png
抹茶雪酪
5 years ago
101722wwwww
看來是一口氣加入幾張才有這種情況,按著順序慢慢加減就沒問題了
https://images.plurk.com/6bbveDae2RUBwjUUv6H144.png https://images.plurk.com/7qvAzbsxHbEas35ou95AqG.png
群組批量刪除基本上寫完了
加表符比較麻煩,要特別多弄個按鍵彈出加入哪個群組
刪除表符群組:選擇表符群組之後,按書籤,一鍵刪除
https://images.plurk.com/2SrPnGeOwcD1MTY1PxrHd5.gif

將留言內的表符加入到指定群組:
https://images.plurk.com/4v8uSECr5hnxDj2OgmJitW.gif

有點慢和蠢,但是功能上是成功的!
小爛【趕啊趕文去!】
5 years ago @Edit 5 years ago
真正試用:作為程式員的我覺得好方便啊!快速刪掉200個表符,再一口氣把平常都不會用的狐狸表符加進來了
看看狐狸表符的加入次序都這麼完美,完全按照留言的順序!!!
https://images.plurk.com/5Pnu0BKl4TC4zAovPJhBYp.png

但是用的時候總覺得有點不安,萬一手誤編輯了舊表符噗/錯誤刪除就救不回來了,所以正確備份很重要
由於表符主要是用hash_id砌成,理論上可以做到完整匯出然後砍掉重新匯入的功能,這樣子連keyword都能夠保留
不知道有沒有人真的在等我的程式,但低調發佈一下好了
注意:本人絕不保證成功或沒有出錯,請做足備份,加錯刪錯與本人無關

以下只限電腦版使用
首先在電腦瀏覽器裡,將這個加入為JS書籤:表符工具

然後在你的噗浪頁面或者你的表符頁面按一下這個表符工具的書籤:
你就能看到上方有「群組N:(組群表符數)/總表符數」
右上角多了刪除群組的按鍵
https://images.plurk.com/5adVDOupF5QnrrEbTsHSAo.png https://images.plurk.com/DKf326JFznEaaSNyqWq8L.png
注意這邊為免誤刪重要表符,所以預設的第一群組愛心表符不開放刪除功能,按鍵是灰色的
換句話,沒噗幣就用不了這個刪表符功能 除非你自行修改程式
例如我在貓群組裡按「刪除群組」,為免手誤所以這邊會再詢問是否要刪除:
https://images.plurk.com/5S2h0ZRnpuAFDByYoGKCNX.png
按確定之後,群組內的表符就清空了(群組本身不刪除)
https://images.plurk.com/ulxVMuu4LYKDfwp9FYfir.png
小爛【趕啊趕文去!】
5 years ago @Edit 5 years ago
至於加表符就很簡陋,沒有檢查800個,也只針對留言內的表符(噗首的表符沒有這個功能),請慎用
------------
先將設定妥當上述的表符工具,再將這個加入為JS書籤:加表符

1)先打開表符噗,留言內有你的一堆表符
2)先點擊之前的表符工具書籤,確認看到群組計數
3)點擊留言的下箭咀
https://images.plurk.com/3V5FcQlqDdHA8DujKMgI4p.png
4)點擊「加表符」書籤,會問你要加到哪個群組
之前清空的貓表符是群組18,這裡就輸入「18」
https://images.plurk.com/3ViArBHhsZokaxlWkocj9b.png
5)確定後,留言內的表符就會加回來了
重點注意:
這個工具只算是整理表符時幫助快速處理
人手加減表符或改群組後,它不會即時更新表符數等資料,必須重新按「表符工具」來更新

所以真正使用前最好重新載入頁面,點擊書籤才使用(特別是加減功能)
美智◆カトルの心
5 years ago @Edit 5 years ago
路過推了舊噗不好意思,這個工具實在太好用了,不知道可不可以許願功能!希望可以有大量拖移表符位置,跟多個表符刪除(而非群組直接刪除)QQ!!這裡用了你許多的工具,實在太感謝了
HM_Michi: 這些都不會做
小爛【趕啊趕文去!】
5 years ago @Edit 5 years ago
籠統來說其實不難,只是在表符上方加個onclick handler,點擊時就把表符ID推進array裡,點擊兩次就把表符ID從array抽走,在群組上加個ondrop handler就差不多了。
但實際做下去,官方的點擊表符=官方現在的用法,自己設計的點擊表符功能=大量處理表符,寫下去就要顧及不能和官方的功能混淆,還有UI上的……
真要寫下去必須先解讀官方的minify js,而我不擅長寫前端和插件。
小爛【趕啊趕文去!】
5 years ago @Edit 5 years ago
HM_Michi: 如果是多個表符刪除,有個稍微加快一點速度的手動方法:
1)把你要刪的表符拖在一起(要刪十四個就排成相連的兩行)
2)點擊選取第一個要刪的表符
3)右手滑鼠按「刪除」,左手按Enter確定刪除
4)官方會自動選取右側下一個表符

因為官方自動選取下個表符,所以你不斷玩遊戲般滑鼠定格留在「刪除」鍵點擊+按Enter就能快速刪除一整排
不用讓游標在點選表符、按「刪除」、按「確定刪除」之間來回
[繼續技術流]前幾天看偷偷說,有旅人提到關於表符搬至其他群組的辦法:把想搬的表符放在一個留言裡,然後用手機app點表符,就像加新表符一樣。實測之後可行,但表符ID好像不同了,這就不理想……
仔細想想,利用抓留言內的表符進行批量刪除/搬群組也可行欸。
程式上跟加表符應該差不多,程式可重用,大概就URL不同吧

設定表符群組:/EmoticonManager2/setGroup
param: {token, hash_id, group_id}
進一步去想,應該有設定表符順序的辦法:

設定表符順序:/EmoticonManager2/setOrder
param: {token, hash_id, after_hash_id}
註:表符應該以Linked List來排序,hash_id是搬的表符,after_hash_id是插到哪個表符之後。如果要搬到第一位,after_hash_id="+"

同樣道理,只要在留言裡把表符先排序妥當,就可以不斷setOrder了
(前提是已經加了表符和表符已放入同一群組)
不過排序比起批量刪除/搬群組麻煩
先來貼一堆狼表符來測試:
小爛【趕啊趕文去!】
5 years ago @Edit 5 years ago
總算完成了!!可以拯救我那快要爆掉的表符庫!!
利用留言進行批量的加表符/刪表符/移動群組!有按鍵就是比較輕鬆!!
移除狼表符:
https://images.plurk.com/6hnwr0BqZ0BSpMFeLwxIRB.gif
加入狼表符:
https://images.plurk.com/5K59Iv8K2jSSQqvucBKsFx.gif
將狼表符移到狐表符群組:
https://images.plurk.com/7q07JX9XkeKKTLd9y1CDit.gif

------
接下來應該整理一下那醜陋的程式碼(雖然懶得整理也不擅長JS...)
忽然在思考突破800表符的方法
考慮到貼網址也可以顯示表符,不介意方括號的話,那麼用插件突破800表符其實很容易辦到,只要有一個按鈕,按下去能顯示表符網址就很簡單了

基於太懶的關係,直接測試覆蓋掉原本的官方表情,結論是可行的
https://images.plurk.com/49vQWKvvIogQp4HyzdkZyo.png https://images.plurk.com/4hlyZm1zqugq0JrVMto9sJ.png
最初的思考方式是直接插入全新群組,但是硬插進去官方表符通不過去,有幾處要改,插入自訂表符也有難度
弄到一半覺得搞群組的話,大概大修改/乾脆寫個不依賴現時表符邏輯的全新JS才辦得到

那麼最懶的辦法就是直接替換原有的官方表符,測試過確認非常容易辦到
理論上,加一枚按鈕,可以輕鬆辦到官方>狐>真人>小表符>官方的旋轉式切換(或者直接加個下拉選單更簡單)
我真是天才,天才不會公開程式碼
https://images.plurk.com/5mBwVA8mRqAOQpR7C0Eyn.gif
再修正改良一下就能給自己用了,突破800不是夢 雖然我不經常用表符
既然突破800不是夢 那麼就來思考如何製作最基本的tag搜尋功能
測試一下,可以在getEmoticons之後加filter來達到過濾功能(以下就是只顯示emo7*的表符)
https://images.plurk.com/4KAyN0U1dJ5CBf2Mfr8Qgp.png
那麼tag搜尋功能也不是夢

可是在做夢之前我是不是該研究一下噗浪卡卡的死因,快樂地寫一堆最後死掉也是很慘的
back to top