[2023-05-11更新] 虎绿林API:JSON Page

回复列表(72|显示机器人聊天)
  • @Ta / 2021-09-22 / /

    @胡椒舰长,现在看起来,维护一个js版的UBB JSON解析器可能不太现实,因为我随时可能会新增UBB。
    所以直接从HTML入手似乎是更简单的方案:

    "<a class=\"userinfo\" href=\"user.info.22191.json\">a676774305</a> 在 <a class=\"hu60_pos\" href=\"bbs.topic.97020.json?floor=14#14\">帖子“Typora骚操作之自动上传图床”的14楼</a> at你:\n<blockquote>\n<a class=\"userinfo\" href=\"user.info.22230.json\">@hik</a>,<a class=\"userinfo\" href=\"user.info.1.json\">@老虎会游泳</a>,<br/>求问哪一个是Typora官网啊,&nbsp;这俩是不是有一个是假的啊?<br/><a class=\"userlink\" href=\"https://www.typora.net\">https://www.typora.net</a><br/><a class=\"userlink\" href=\"https://www.typora.io\">https://www.typora.io</a>\n</blockquote>"
    

    可以看出来,链接都加了class,比如@链接是userinfo,帖子链接是hu60_pos。这样只需要给a标签绑定onclick事件,然后检查它的class,不同的class对应不同的行为就行了。至于怎么得到想要的数据,如果是我来做,我会选择分隔href的值。因为特定类型的链接格式是固定的,所以分割起来并不难。

  • @Ta / 2021-09-22 / /

    @胡椒舰长,如果你要修改html的格式,完全可以。甚至给你定制一种全新的格式也完全可行。但是想修改UBB JSON的格式,做不到。

    比如这就是一种全新格式的例子:
    https://github.com/hu60t/hu60wap6/blob/master/src/class/ubbtext.php

    https://hu60.cn/q.php/msg.index.@.json?_content=text

  • @Ta / 2021-09-22 / /

    @胡椒舰长,目前最简单的方案是,你修改ubbdisplay.php,把输出的HTML改成你想要的形式,然后我把它作为新的_content类型内置进去,比如叫做:
    https://hu60.cn/q.php/msg.index.@.json?_content=app

  • @Ta / 2021-09-22 / /
    @老虎会游泳, 我目前 暂时用 循环渲染标记屏蔽了 type=style的范围的东西,也就是用户小尾巴屏蔽了。
    我用json格式,比较兼容整体的应用,例如@用户,点击,可以跳转到用户页面。如果直接使用html-parse那种套一个html,很多功能就无了。
    不过好在,我现在自己写了一个ubb解析js版,目前能解析 大部分常用标签。如果你改动了,我也会跟进。
    image.png
  • @Ta / 2021-09-22 / /
    @老虎会游泳,不过以后,我肯定会 修改ubbdisplay.php,把输出的json格式,自定义重新组织下,就完美兼容了
  • @Ta / 2021-09-22 / /

    @胡椒舰长,用户不只有小尾巴,还有文本框:
    https://hu60.cn/q.php/bbs.topic.95430.html

    青青子衿,悠悠我心
    有的人使用了css文本框,正文在文本框里面,也会被楼主的代码屏蔽。此时楼层中的所有内容都会完全消失。 此外,使用了楼主的代码后,你也看不到这个帖子中的章节标题了:https://hu60.cn/q.php/bbs.topic.94992.html
    京ICP备18041936号
  • @Ta / 2021-09-22 / /

    修改ubbdisplay.php,把输出的json格式,自定义重新组织下

    这是个好思路啊。修改ubbdisplay.php,让它生成一个JSON字符串。

    @胡椒舰长,你可以说一下你想要的格式,我来修改。

    发一个你想要格式的例子,包括markdown开始标记、div标记等。

  • @Ta / 2021-09-22 / /
    @老虎会游泳

    目前我使用的VUE这种东西, 只支持 【组件循环渲染】和【组件递归】,
    所以,都是用解析json 然后 对应换上 vue专用 标签组件

    问题1:如果是小尾巴这种需要
    <father><son1><son2></son2></son1></father> 无限极嵌套的格式,需要json 也是这种无限极嵌套,
    例如{
     "type":"style",
    "value":"xx",
      "other":"xx",
      "children":{
        "type":"style",
        "value":"xx",
        "other":"xx",
        "children":{}
      }
    }

    问题2: 如果设计到markdown的内容,我实在是没办法了,因为 我发现nvue情况下的所有的 markdown解析组件都不支持,markdown我目前没找到好办法

  • @Ta / 2021-09-22 / /

    @胡椒舰长,所以你不如使用webview直接展示html。捕获webview中的链接点击事件应该不难。

  • @Ta / 2021-09-22 / /

    @胡椒舰长,webview肯定可以和主程序通信。你可以在我的html后附加你自己的<script>标签,拦截@链接的onclick事件,添加通信代码。这样点击那些链接后,依然可以执行你想执行的动作。

  • @Ta / 2021-09-22 / /

    @胡椒舰长,你的同源策略实现有问题。

    你POST的时候加了bbs.newtopic.88.json?_origin=*,又没有附加sid,这会导致掉线,所以发帖回帖都不会成功。

    图片.png

    正确的做法是:

    1. 如果h5的域名不是hu60.cn,就需要做登录功能,获取并存储sid,然后每个请求都要加?_origin=*和sid。注意是每个请求,不只是POST请求,否则部署为web页面时就会遇到浏览器的同源错误拦截,首页也加载不了,案例:https://static.hu60.cn/h5/
    2. 如果h5的域名是hu60.cn,可以不做登录功能,但是所有请求都不能加?_origin=*,注意POST请求也不能加,否则POST的时候就会掉线(因为没加sid),发帖回帖都不会成功。案例:https://hu60.cn/h5/
  • @Ta / 2021-09-22 / /

    @胡椒舰长,此外为了编程简单,我建议改为传递x-origin: *x-sid: xxx头信息,这样就不必在URL里大做文章了。

    然后代码就可以简化为:

    if (不同源) {
      xhr工具.添加头信息('x-origin', '*');
      xhr工具.添加头信息('x-sid', '通过登陆获取到的sid');
    }
    

    所有全局参数(_uinfo _json _content _myself _origin _sid _topic_summary)现在都可以通过GET、POST和Header(x-uinfo x-json x-content x-myself x-origin x-sid x-topic-summary)方式传递。

  • @Ta / 2021-09-26 / /
    @老虎会游泳,目前我已经找到了一个html2json的库,可以实现我所说的递归生成。预期效果应该可以还原原版网页的功能
    https://blog.csdn.net/lsvtogergo/article/details/106223693

    image.png
添加新回复
回复需要登录