乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 98|回复: 19

[编程交流] 互联网新闻阅读器

[复制链接]

37

主题

125

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
190
发表于 2022-7-6 11:03:17 | 显示全部楼层 |阅读模式
大家好,
 
作为与工作相关任务的概念证明,我制作了一个快速而肮脏的互联网新闻阅读器
 
当前设置为reddit。com(希望这不是中断ToA)。基本上,它创建了当前头版文章的列表
 
按ctrl键并单击文本以跟随链接。
 
  1. (defun c:reddit( / http regex url results title match i)
  2. (setq results (list))
  3. (setq url "http://www.reddit.com")
  4. ;xmlHTTP Object------
  5. ;Create xmlHTTP object
  6. (setq http (vlax-create-object "MSXML2.XMLHTTP"))
  7. ;invoke open connection
  8. (vlax-invoke-method http 'open "GET" (strcat url "/") :vlax-true)
  9. ;Attempt to estatblish connection
  10. (if (vl-catch-all-error-p(vl-catch-all-apply 'vlax-invoke (list http 'send)))
  11.    ;On fail
  12.    (princ "\nfail")
  13.    ;On successful connect
  14.    (while (not (eq (vlax-get http 'readystate) 4))
  15.      ;capture events
  16.      (vla-eval (vlax-get-acad-object) "DoEvents")
  17.    )
  18. )
  19. ;Get response text
  20. (setq text (vlax-get-property http 'responsetext))
  21. ;REGEX OBJECT -------
  22. ;Create regexp
  23. (setq regex (vlax-create-object "vbscript.regexp"))
  24. ;Set regex properties
  25. (vlax-put-property regex 'global :vlax-true)
  26. (vlax-put-property regex 'IgnoreCase :vlax-true)
  27. (vlax-put-property regex 'multiline :vlax-true)
  28. ;Compile regex pattern
  29. (vlax-put-property regex 'pattern "<a (class="title " target="_blank" href="[^>]*")+ >(.*?)(</a>)+?")    ; Article link pattern
  30. ;Carry out match
  31. (setq matches (vlax-invoke-method regex 'execute text))
  32. ;With every match
  33. (setq i -1)
  34. (while(< (setq i (1+ i)) (vlax-get-property matches 'count))
  35.    ;Get result [i]
  36.    (setq match(vlax-get-property(vlax-get-property matches 'item i) 'value))
  37.    ;Get hyperlink title
  38.    (vlax-put-property regex 'pattern ">(.*?)<")
  39.    (setq title (vlax-get-property
  40.          (vlax-get-property
  41.            (vlax-invoke-method regex 'execute match) 'item 0) 'value))
  42.    (setq title (substr title 2 (-(strlen title) 2)))
  43.    ;Get hyperlink path
  44.    (vlax-put-property regex 'pattern "href="([^>"]*)("+)")
  45.    (setq hlink (vlax-get-property
  46.          (vlax-get-property
  47.            (vlax-invoke-method regex 'execute match) 'item 0) 'value))
  48.    (setq hlink (substr hlink 7 (-(strlen hlink) 7)))
  49.    (if(= (substr hlink 1 1) "/")
  50.      (setq hlink (strcat url hlink))
  51.    )
  52.    (setq results (append results(list (list title hlink))))
  53. )
  54. (createLinks results)
  55. (vlax-release-object regex)
  56. (vlax-release-object http)
  57. )
  58. (defun createLinks(results / )
  59. (setq mspace (vla-get-modelspace
  60.         (vla-get-activedocument
  61.           (vlax-get-acad-object))))
  62. (setq i 0)
  63. (setq y -300.0)
  64. (while (< (setq i (1+ i)) (length results))
  65.    (setq text (vla-addtext mspace
  66.         (car (nth i results))
  67.         (vlax-3d-point 0.0 (* y i) 0.0) 200.0))
  68.    (setq hlinks (vla-get-hyperlinks text))
  69.    (vla-add hlinks (cadr (nth i results)))
  70. )
  71. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:08:45 | 显示全部楼层
快速使用李的方法。。。
 
可悲的是,似乎你必须根据你想要阅读的RSS做一些准备工作。
 
  1. (defun c:news ( / *error* spc url Data RSS Items )
  2. ;; © Lee Mac  ~  07.06.10
  3. (defun *error* ( msg )
  4.    (and Doc (not (vlax-object-released-p Doc)) (vlax-release-object Doc))
  5.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  6.        (princ (strcat "\n** Error: " msg " **")))
  7.    (princ)
  8. )
  9. (setq spc
  10.    (if
  11.      (or
  12.        (eq AcModelSpace
  13.          (vla-get-ActiveSpace
  14.            (setq doc
  15.              (vla-get-ActiveDocument
  16.                (vlax-get-acad-object)
  17.              )
  18.            )
  19.          )
  20.        )
  21.        (eq :vlax-true (vla-get-MSpace doc))
  22.      )
  23.      (vla-get-ModelSpace doc)
  24.      (vla-get-PaperSpace doc)
  25.    )
  26. )
  27. (setq url "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml")
  28. (if (setq Data (VK_ReadXML url))
  29.    (progn
  30.      (setq RSS (caddr (car (caddr (caddr Data)))))
  31.      (setq Items (RemoveTilFoo (lambda ( x ) (eq "item" (strcase (car x) t))) RSS))
  32.      (if (and (setq Items (mapcar 'caddr Items))
  33.               (setq Items (SubList Items 0 10))
  34.               (setq Items
  35.                 (mapcar
  36.                   (function
  37.                     (lambda ( x )
  38.                       (list (caddr (car x)) (caddr (caddr x)))
  39.                     )
  40.                   )
  41.                   Items
  42.                 )
  43.               )
  44.          )
  45.        (
  46.          (lambda ( i )
  47.            (foreach x Items
  48.              (setq tx
  49.                (AddText spc (strcat (chr 149) "  " (car x))
  50.                  (polar '(0. 0. 0.)
  51.                    (/ (* 3 pi) 2.) (* 1.5 (setq i (1+ i)) (getvar 'TextSize))
  52.                  )
  53.                  (getvar 'TextSize)
  54.                )
  55.              )
  56.              (vla-put-color tx acYellow)
  57.              (vla-Add (vla-get-Hyperlinks tx) (cadr x))
  58.            )
  59.            (vla-ZoomExtents (vlax-get-acad-object))
  60.          )
  61.          -1
  62.        )
  63.      )
  64.    )
  65. )
  66. )
  67. (defun AddText ( space str pt hgt )
  68. (vla-AddText space str (vlax-3D-point pt) hgt)
  69. )
  70. (defun RemoveTilFoo ( foo lst )
  71. ;; © Lee Mac  ~  07.06.10
  72. (while (and lst (not (foo (car lst))))
  73.    (setq lst (cdr lst))
  74. )
  75. lst
  76. )
  77. (defun SubList ( lst start len )
  78. ;; © Lee Mac  ~  07.06.10
  79. (if lst
  80.    (if (< 0 start)
  81.      (SubList (cdr lst) (1- start) len)
  82.      (if (< 0 len)
  83.        (cons (car lst)
  84.          (SubList (cdr lst) start (1- len))
  85.        )
  86.      )
  87.    )
  88. )
  89. )
  90. ;; .....................................................................;;
  91. ;;                   -- VovKa's XML Functions --                        ;;
  92. ;; .....................................................................;;
  93. (defun vk_XMLGetAttributes (Node / Attributes Attribute OutList)
  94. (if (setq Attributes (vlax-get Node "attributes"))
  95.    (progn (while (setq Attribute (vlax-invoke Attributes "nextNode"))
  96.         (setq OutList (cons (cons (vlax-get Attribute "nodeName")
  97.                       (vlax-get Attribute "nodeValue")
  98.                 )
  99.                 OutList
  100.               )
  101.         )
  102.         (vlax-release-object Attribute)
  103.       )
  104.       (vlax-release-object Attributes)
  105.       (reverse OutList)
  106.    )
  107. )
  108. )
  109. ;;;(vk_XMLGetAttributes Node)
  110. (defun vk_XMLGetchildNodes (Node /)
  111. (if Node
  112.    (if    (= (vlax-get Node "nodeType") 3)
  113.      (vlax-get Node "nodeValue")
  114.      (append (list
  115.        (list (vlax-get Node "nodeName")
  116.              (vk_XMLGetAttributes Node)
  117.              (vk_XMLGetchildNodes (vlax-get Node "firstChild"))
  118.        )
  119.          )
  120.          (vk_XMLGetchildNodes (vlax-get Node "nextSibling"))
  121.      )
  122.    )
  123. )
  124. )
  125. ;;;(vk_XMLGetchildNodes Node)
  126. (defun vk_ReadXML (FileName / Doc OutList *error*)
  127. (if (and FileName
  128. ;;;       (setq FileName (findfile FileName))
  129.       (setq Doc (vlax-create-object "MSXML.DOMDocument"))
  130.       (not (vlax-put Doc "async" 0))
  131.       (if (= (vlax-invoke Doc "load" FileName) -1)
  132.         t
  133.         (prompt
  134.           (strcat "\nError: "
  135.               (vlax-get (vlax-get Doc "parseError") "reason")
  136.           )
  137.         )
  138.       )
  139.       (= (vlax-get Doc "readyState") 4)
  140.      )
  141.    (setq OutList (vk_XMLGetchildNodes (vlax-get Doc "firstChild")))
  142. )
  143. (and Doc (vlax-release-object Doc))
  144. (gc)
  145. OutList
  146. )
  147. ;;;(vk_ReadXML (getfiled "" "" "xml" 16))
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:11:30 | 显示全部楼层
你本可以在上面留下我的名字的哈哈
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:14:03 | 显示全部楼层
固定的
我希望你不要认为我在要求任何所有权。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:18:59 | 显示全部楼层
别担心
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:21:26 | 显示全部楼层
遗憾的是,你不能以一种通用的方式轻松地去掉你想要的两段文字。
回复

使用道具 举报

37

主题

125

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
190
发表于 2022-7-6 11:25:02 | 显示全部楼层
是的,我写这篇文章的时候在想,一定有更好的方法
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:27:22 | 显示全部楼层
我肯定有,如果我用过这样的东西,我可能会考虑尝试一下。我只想展示一个不使用文本的示例(这就是我使用大部分代码的原因)。我很乐意继续使用谷歌阅读器。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:30:24 | 显示全部楼层
我也没有用-但我很容易沉迷于学习新事物。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:32:05 | 显示全部楼层
同上,但很难证明在工作时为随机的东西编码是合理的。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 11:24 , Processed in 0.716954 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表