duangsuse::Echo
717 subscribers
4.25K photos
130 videos
583 files
6.47K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
完美不良实践(
🤔 想想 Scanner 是不是不够优雅...
数据会类似这样
duangsuse::Echo
🤔 想想 Scanner 是不是不够优雅...
我觉得就 Scanner 的逻辑结构上应该不够优雅,state 几乎是个笑话、lineDoUntil 非得加一个『keepLastLineOnce』才能用(doUntil 是在 scan body 里看到 new message header 的时候用的,可是等到这个 Message 返回,新 message 头会被下一次 iteration 直接忽视掉(因为我没设计好数据流,然后每次由判断 hasNext 的函数读新行的),导致漏掉偶数消息,不得不引入类似『mark/reset』的机制才可以),不过能用就好(跑路 🙈
telegramscanner.zip
20.8 KB
❤️ 🤔
duangsuse::Echo
telegramscanner.zip
最后写下 XML 序列化就彻底完成了!(因为这个最终是要用 Ruby 来查询数据的,虽然我有写 JavaFX GUI 的打算,可是我觉得还是晚一点好。
🤔 这是写 HTML 的节奏?虽然是 XML... 跑,反正都是 SGML 呢?(
telegramscanner.zip
23.6 KB
telegram-scanner.jar
34.2 KB
Maven jar plugin 生成的 Jar application,可选 -test, -dump, -dump-yaml, -dump-debug-yaml
duangsuse::Echo
🤔 这是写 HTML 的节奏?虽然是 XML... 跑,反正都是 SGML 呢?(
完结撒花! OwO #Telegram #project
使用『Copy selected text』格式复制 Telegram Desktop Qt 的消息,这个软件可以以行为单位解析它,输出『消息对象』数组。下面会利用这个软件和 Ruby 来给大家分析最近本频道的广播。
使用 cat ~/count.txt | java -jar telegram-scanner.jar -dump > test.xml 命令,它会输出 XML 结构,类似这样
duangsuse::Echo
Photo
Ruby 里,要把它解析成 List & Object 的形式,只需要利用 Nokogiri:

require 'nokogiri'

plain = File.read('test.xml')
doc = Nokogiri.parse(plain)

root = doc.children[0]

def collect_real_tags(xml)
i = 1; ret = []
while i < xml.size
ret << xml[i]
i += 2
end
return ret
end

real = collect_real_tags root.children

m = real.map { |n| n.children.find_all { |i| i.is_a? Nokogiri::XML::Element } }

m.map! { |a| a.find_all { |i| i.name == "dt" }.zip(a.find_all { |i| i.name == "dd" }).map { |n| [n.first.children[0].text, n.last.children.text] } }
m.map!(&:to_h)

r = m.dup

最后再 post-process 一下就可以了

r.map! { |h| h.merge({'debug' => %w[no off line message_line].zip(h['debug'].match(/\{message_no=(\d+),\s*offset=(\d+),\s*line=(\d+),\s*message_line=(\d+)\}/).captures.map(&:to_i)).to_h, 'hashtags' => h['hashtags'].tr("[]", "").split(','), 'links' => h['links'].tr("[] ", "").split(',') }) }

# time
r.map! { |h| h.merge({ 'published' => Time.at(0, h['published'].to_i, :millisecond) }) }
#Ruby 滥用 Ruby
🤔 下面就是本 #Telegram Channel 的消息内容统计信息了