语笑嫣然 发表于 2014-3-13 22:49:54

【审核】Webparserw: 天气皮肤变换

代码小白300问之一:“我应该怎样转换天气文本,才能将网站上的天气信息提取出来并写到皮肤里去?”你弱爆了!首先找到你的measure或者相关的一堆measure(一般一个天气皮肤有3-5个measure),它们都是用来“天气转换”的文本。它们可能会是这样的:
Measure=Plugin
Plugin=WebParser
Url=
StringIndex=34
请注意,天气皮肤通常配合一个主要measure进行工作,这个measure会将天气网站的RSS中的信息全部提取出来。然后再由后面单个的measure将具体的信息从前面提出来的信息中挑出来。因此你常会看到这种写法:
Measure=Plugin
Plugin=WebParser
UpdateRate=600
URL=http://weather.yahooapis.com/forecastrss?p=#Location#&u=#Unit#
RegExp="(?siU)<title>.*- (.*)</title>.*<link>(.*)/\*(.*)</link>.*<description>(.*)</description>.*<language>(.*)</language>.*<lastBuildDate>(.*)</lastBuildDate>.*<yweather:location city="(.*)".*region="(.*)".*country="(.*)".*<yweather:units temperature="(.*)".*distance="(.*)".* pressure="(.*)".*speed="(.*)".*<yweather:wind chill="(.*)".*direction="(.*)".*speed="(.*)".*<yweather:atmosphere humidity="(.*)".* visibility="(.*)".*pressure="(.*)".* rising="(.*)".*<yweather:astronomy sunrise="(.*)".*sunset="(.*)".*<title>(.*)</title>.*<width>(.*)</width>.*<height>(.*)</height>.*<link>(.*)</link>.*<url>(.*)</url>.*<title>(.*)</title>.*<geo:lat>(.*)</geo:lat>.*<geo:long>(.*)</geo:long>.*<link>(.*)/\*(.*)</link>.*<pubDate>(.*)</pubDate>.*<yweather:condition text="(.*)".*code="(.*)".*temp="(.*)".*date="(.*)".*<img src="(.*)".*Current Conditions:</b><br />(.*)<BR />.*Forecast:</b><BR />(.*)<br />.*(.*)<br />.*<a href="(.*)/\*(.*)">.*provided by <a href="(.*)" >(.*)</a>.*<yweather:forecast day="(.*)".*date="(.*)".*low="(.*)".*high="(.*)".*text="(.*)".*code="(.*)".*<yweather:forecast day="(.*)".*date="(.*)".*low="(.*)".*high="(.*)".*text="(.*)".*code="(.*)".*"
然后后面紧跟这么一些皮肤代码:
Measure=Plugin
Plugin=WebParser
Url=
StringIndex=34
如你所见,这个measure用来得到(这是我们的主RSSmeasure)这个节点中“URL=”的结果,然后具体要求为StringIndex=34,这个数组中的索引会返回一个值,这个值就是“当前天气状况”。当Weather.com返回这个值之后,你需要将它们转换成自然语言。为了达到这个目的,你需要在"StringIndex=34"的后面增加一行(在我们的例子里):Substitute="Cloudy":"Bewölkt","Partly Cloudy":"Teilweise Bewölkt"一般格式如下:Substitute="替代品":"被替代品","替代品":"被替代品"这里的标点非常重要。"替代品"和"被替代品"都要用引号括起来。每组之间用逗号隔开。



好了完成了。在上面的例子中,当文字在一个节点中显示时,“Cloudy”将代替"Bewölkt"。代码小白300问之二——“当前天气”文本的代码会从weather.com/ Yahoo Weather得到些什么,好让我用来转换?下面是转换的数字和文字的对应:0 – 雷暴
1 – 风雨交加
2 – 风雨交加
3 – 雷暴
4 – 雷暴
5 - 雨雪
6 – 雨夹雪??
7 – 冰雪
8 – 冻毛毛雨???
9 – 毛毛雨
10 – 冻雨
11 – 雷阵雨
11 – 阵雨
11 – 小雨
12 – 大雨
13 – 阵雪
14 – 小雪
15 – 中雪
16 – 大雪
17 – 暴雪
18 – 冰雹
19 – 浮尘
20 – 雾
21 – 薄雾
22 – 烟尘
23 – 风
24 – 风
25 – 严寒
26 – 多云
27 – 多云的夜间 (此处有不懂:the "Night" will not be included)
28 – 多云
29 – 部分云的夜间 (什么玩意儿??the "Night" will not be included)
30 – 中等量的云????
31 – 晴夜 (the "Night" will not be included)
32 – 阳光
33 – 晴
33 – 晴朗的晚上 (the "Night" will not be included)
34 – 晴
34 – 阳光
35 – 雷暴
36 – 炎热
37 – 少雷???
38 – 零散雷暴
39 – 零散下雨
40 – 大雨
41 – 零散下雪
42 – 大雪
43 – 风雪
44 – 部分晴朗的白天
45 – 零星阵雨的晚上 (the "Night" will not be included)
46 – 下雪的晚上
47 – 零星雷暴的晚上 (the "Night" will not be included)
翻译者的提问:能不能把这些换成中国天气网的数字和对应?反正我们又不用外国的天气网。。。

董连志 发表于 2014-3-26 10:09:10

好东西...........
页: [1]
查看完整版本: 【审核】Webparserw: 天气皮肤变换