查看: 960|回复: 0

[讨论] 在游戏中获取当天新闻内容(娱乐用)

[复制链接]
梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2025-4-19 20:42:34 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 ppspssss 于 2025-4-19 20:49 编辑

草稿
关于以前的天气贴子:(天气api) 娯乐用 自动检测所在地区天气(使用论譠网友提供的api)
https://rpg.blue/forum.php?mod=viewthread&tid=484877
几年以前问论坛的人获取的下载网页源代码方法URLDownloadToCacheFile Win32api (仅限windows使用)
是类似爬虫的方法 ? , 好像不算爬虫,这里贴子 -- 只是娱乐用 ,所以获取一些标题就行 而不用些网页api接口直接用获取网页,由于不是api接口好像获取内容的没什么特征码就是不能只是新闻标题,全夹杂类信息
以匹配表达式获取新稿标题
我在想如果游戏里获取新的资讯,打开游戏时加载网页 ,在游戏里比如告示板之类的写出来,感觉像只打开游戏也不会错过些新闻(我猜)
想了一种是天气,一种是新闻,是每天都有新的内容, 网站又多适合啥游戏都张贴公示
此次难度较大不是用api获取,要在同一句中重复匹配,

注:加载时网站:
1 生成的记事本txt大小需要尽量小,访问网站速度要尽量快(不同地区不同),时间大于10秒会脚本被备份,比如南方网 350kb ,环球网 110kb 都是合格,环球网更小加载更快(省流),如果访问该网页网速要在50kb/s的话则需要500kb大小以下,
  (有子连结进入后更小只有10kb大小 南方网也有子连结44kb大小) , 也有些网页可能几mb大小就太大基本加载不了
2 网站需能正常获取文本到txt里,有些网站更是无法通过源代码获取文本 ,这种情况就需找其他网页

3需要每个网页都进行制定匹配方案, 要自行分析正规表达式结构,再通过比较  找出合适方案 (有些网页特征码比较少就比较难弄?)

这里用环球网进行例字 (后来用环球网里的 子网页 更好 更小,不过不想改了,要试的话要自己更改)

[pre lang="ruby"]module BBwin

def self.获取新闻网页源代码 #
#a = url_data("https://price.btcfans.com/") #网页例子
a = url_data("https://www.southcn.com/") #环球网地址,可自行替换
f = File.open("新闻源代码.txt","w+") #a+意思:讀取,写入,覆盖原文件,文件不存在自动创建
#p a
f.write(a) #写入a的内容文件
f.close #文件关闭
      
end #def
def self.获取新闻 #
#f = File.open("网页源代码.txt","w+")
@第几天 = 0
@第几天文字 = ""
@周几 = ""
@总数 =""
@行数 = 0
$subject=[]
$subject = File.readlines("新闻源代码.txt")#$subject等于行里所有行数
#p $subject.size
  for i in 0...$subject.size  #遍历所有行数
$subject.chomp! #!發生變化并返回
#$subject =~ /比特币价格<(\d+)/i #错误示范
#p $subject
loop do #由于是同一句中,因此需要反复执行,需检测同一句 (在低版本ruby貌似因没有scan方法(经人工智能询问))
#
#  if ( line1 =~ /<a>(.*?)<b>/ ) #夹杂中的贪婪
$subject =~ /blank">(.*?)</  #非贪婪型重复 匹配"(.*?)"
#注不能以包括"/"衞号, 比如</a>是不行,所以以<
   if ($~ !=nil) and ($~  != "") and ($1 != nil)  #如果是nil(无) “”(空的字串)则不执行
     p $1,$~ #if $1 !=nil #查看匹配结果
#     line1.sub!(/blank">(.*?)</, "")
$subject.sub!(/blank">(.*?)</, "") #删除匹配的结果,以免下一次匹到相同无限循环
  # a = $subject
   #b = a.sub!(/  .*?target="_blank">/, "")  #1 #分别删除前的 bababa...查看天气详情">
#if b == nil
#p "nil!!!",@行数
#next
#end

  # c = b.sub!(/<.*?\/a>/, "")  #1  #删除后的 <bababa.../a> #这里是匹配天气预报不是第几天
#@总数 += c
#@行数 += 1
  # p c
   
  elsif ($~ ==nil ) #如果匹不到就跳出循环进入下一句而不是同一句(跳出loop do)
    break # loop do for #跳出循环loop do
   
  end #if
  end #loop do for


#p c1


end #for i

#p @总数
#f = File.open("test.txt","w+")
#f.write(a)
#f.close

end #def

end #module[/pre]
@有丘直方
老贴[已经过期] 如何利用网頁讀取簡單的文本 , 用RM打开网頁  https://rpg.blue/thread-409865-1-1.html
[fold=下载url脚本(记得是谁给我了,详找老贴子:  )][pre lang="ruby"]    def url_data(url)##下載功能
    # url_data("http://947532.ichengyun.net/bbs/1.png")#其他地方下載print(etc
  api = Win32API.new('Urlmon', 'URLDownloadToCacheFile', 'ippiii', 'i')
  buf = "\0" * 1024
  
if api.call(0, "#{url}?#{rand(10)}", buf, 1024, 0, 0) == 0
   #不知为毛好多网页都不行, 大慨是编码不对? 好多网页数值不等于0 就获取不了
    open(buf.sub(/\0+$/, ""), 'rb') { |f| f.read }.to_s
  else
    p "该网页不支持"
  end
end[/pre][/fold]
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部