我每天早上如何看到天气?

时间:2015-04-04 15:14:52

标签: android regex weather tasker

我想在我的Android手机上创建一个应用程序,告诉我每天早上一段时间的天气,并找到许多网站告诉你如何做,但没有一个真的让它变得容易编辑他们的任务 - 没有真正的文档。此外,有些人有下载任务或配置文件的链接,但它们要么是死链接,要么按原样给出,没有任何解释。

所以我就是这么做的。

3 个答案:

答案 0 :(得分:2)

好的,经过几个小时的搜索,挖掘,在Tasker中玩游戏,更不用说构建正则表达式以使其正常运行......我做到了这一点,让它运转起来。

第1步:从http://openweathermap.org/获取免费的API密钥。它们限制你每10分钟只使用一次窗口,但由于我们每天只使用它一次,这比我们需要的更多。

XML:

    <TaskerData sr="" dvi="1" tv="4.6u3m">
    <Profile sr="prof22" ve="2">
    <cdate>1427972769580</cdate>
    <edate>1428156514542</edate>
    <id>22</id>
    <mid0>23</mid0>
    <nme>08:00 Week Weather</nme>
    <Day sr="con0">
    <wday0>2</wday0>
    <wday1>3</wday1>
    <wday2>4</wday2>
    <wday3>5</wday3>
    <wday4>6</wday4>
    </Day>
    <Time sr="con1">
    <fh>8</fh>
    <fm>0</fm>
    <th>8</th>
    <tm>1</tm>
    </Time>
    <State sr="con2" ve="2">
    <code>10</code>
    <Int sr="arg0" val="1"/>
    </State>
    </Profile>
    <Task sr="task23">
    <cdate>1427980998336</cdate>
    <edate>1428154334252</edate>
    <id>23</id>
    <nme>Tell me the Weather</nme>
    <pri>10</pri>
    <Action sr="act0" ve="7">
    <code>590</code>
    <Str sr="arg0" ve="3">%TIME</Str>
    <Str sr="arg1" ve="3">.</Str>
    <Int sr="arg2" val="0"/>
    </Action>
    <Action sr="act1" ve="7">
    <code>547</code>
    <Str sr="arg0" ve="3">%TIME1</Str>
    <Str sr="arg1" ve="3">%TIME1</Str>
    <Int sr="arg2" val="1"/>
    <Int sr="arg3" val="0"/>
    </Action>
    <Action sr="act10" ve="7">
    <code>547</code>
    <Str sr="arg0" ve="3">%maxmax</Str>
    <Str sr="arg1" ve="3">%max(1)</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    </Action>
    <Action sr="act11" ve="7">
    <code>37</code>
    <ConditionList sr="if">
    <Condition sr="c0" ve="3">
    <lhs>%max(2)</lhs>
    <op>7</op>
    <rhs>%maxmax</rhs>
    </Condition>
    </ConditionList>
    </Action>
    <Action sr="act12" ve="7">
    <code>547</code>
    <Str sr="arg0" ve="3">%maxmax</Str>
    <Str sr="arg1" ve="3">%max(2)</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    </Action>
    <Action sr="act13" ve="7">
    <code>38</code>
    </Action>
    <Action sr="act14" ve="7">
    <code>37</code>
    <ConditionList sr="if">
    <Condition sr="c0" ve="3">
    <lhs>%max(3)</lhs>
    <op>7</op>
    <rhs>%maxmax</rhs>
    </Condition>
    </ConditionList>
    </Action>
    <Action sr="act15" ve="7">
    <code>547</code>
    <Str sr="arg0" ve="3">%maxmax</Str>
    <Str sr="arg1" ve="3">%max(3)</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    </Action>
    <Action sr="act16" ve="7">
    <code>38</code>
    </Action>
    <Action sr="act17" ve="7">
    <code>37</code>
    <ConditionList sr="if">
    <Condition sr="c0" ve="3">
    <lhs>%max(4)</lhs>
    <op>7</op>
    <rhs>%maxmax</rhs>
    </Condition>
    </ConditionList>
    </Action>
    <Action sr="act18" ve="7">
    <code>547</code>
    <Str sr="arg0" ve="3">%maxmax</Str>
    <Str sr="arg1" ve="3">%max(4)</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    </Action>
    <Action sr="act19" ve="7">
    <code>38</code>
    </Action>
    <Action sr="act2" ve="7">
    <code>118</code>
    <Str sr="arg0" ve="3">api.openweathermap.org</Str>
    <Str sr="arg1" ve="3">data/2.5/forecast?q=Cape%20Town&amp;mode=xml&amp;units=metric</Str>
    <Str sr="arg2" ve="3"/>
    <Str sr="arg3" ve="3"/>
    <Str sr="arg4" ve="3"/>
    <Int sr="arg5" val="10"/>
    <Str sr="arg6" ve="3">text/xml</Str>
    <Str sr="arg7" ve="3">jim.xml</Str>
    <Int sr="arg8" val="0"/>
    </Action>
    <Action sr="act20" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%jim</Str>
    <Str sr="arg1" ve="3">s\svalue="[\w\s]*"</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3">%clouds</Str>
    <Int sr="arg6" val="0"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act21" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%clouds(1)</Str>
    <Str sr="arg1" ve="3">s\svalue="</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3">%clouds(1)</Str>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act22" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%clouds(1)</Str>
    <Str sr="arg1" ve="3">"</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3"/>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act23" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%jim</Str>
    <Str sr="arg1" ve="3">g="\d*\.\d*"\scode="\w*"\sname=[\S]*"</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="1"/>
    <Str sr="arg5" ve="3">%from</Str>
    <Int sr="arg6" val="0"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act24" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%from(1)</Str>
    <Str sr="arg1" ve="3">g="\d*\.\d*"\scode="\w*"\sname=</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="1"/>
    <Str sr="arg5" ve="3">%from(1)</Str>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act25" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%from(1)</Str>
    <Str sr="arg1" ve="3">"</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="1"/>
    <Str sr="arg5" ve="3">%from(1)</Str>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act26" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%jim</Str>
    <Str sr="arg1" ve="3">mps="\d*\.\d*"\sname="[\w\s]*"</Str>
    <Int sr="arg2" val="1"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="1"/>
    <Str sr="arg5" ve="3">%wind</Str>
    <Int sr="arg6" val="0"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act27" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%wind(1)</Str>
    <Str sr="arg1" ve="3">mps="\d*\.\d*"\sname="</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3">%wind(1)</Str>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act28" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%wind(1)</Str>
    <Str sr="arg1" ve="3">"</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="1"/>
    <Str sr="arg5" ve="3">%wind(1)</Str>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act29" ve="7">
    <code>307</code>
    <Int sr="arg0" val="10"/>
    <Int sr="arg1" val="0"/>
    <Int sr="arg2" val="0"/>
    </Action>
    <Action sr="act3" ve="7">
    <code>417</code>
    <Str sr="arg0" ve="3">jim.xml</Str>
    <Str sr="arg1" ve="3">%jim</Str>
    </Action>
    <Action sr="act30" ve="7">
    <code>559</code>
    <Str sr="arg0" ve="3">Good morning. It is now %TIME1 AM. There will be %clouds(1) today with a maximum expected temperature of %maxmax degrees. You can expect a %wind(1)         from the %from(1).</Str>
    <Str sr="arg1" ve="3">com.ivona.tts:eng-GBR</Str>
    <Int sr="arg2" val="3"/>
    <Int sr="arg3" val="5"/>
    <Int sr="arg4" val="5"/>
    <Int sr="arg5" val="1"/>
    <Int sr="arg6" val="0"/>
    <Int sr="arg7" val="0"/>
    </Action>
    <Action sr="act4" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%jim</Str>
    <Str sr="arg1" ve="3">([\S\s]{1900}from="\d*-\d*-\d*T21:00:00")</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="1"/>
    <Int sr="arg4" val="1"/>
    <Str sr="arg5" ve="3">%jim</Str>
    <Int sr="arg6" val="0"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act5" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%jim</Str>
    <Str sr="arg1" ve="3">max="\d*</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3">%max</Str>
    <Int sr="arg6" val="0"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act6" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%max(1)</Str>
    <Str sr="arg1" ve="3">max="</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3"/>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act7" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%max(2)</Str>
    <Str sr="arg1" ve="3">max="</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3"/>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act8" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%max(3)</Str>
    <Str sr="arg1" ve="3">max="</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3"/>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Action sr="act9" ve="7">
    <code>598</code>
    <Str sr="arg0" ve="3">%max(4)</Str>
    <Str sr="arg1" ve="3">max="</Str>
    <Int sr="arg2" val="0"/>
    <Int sr="arg3" val="0"/>
    <Int sr="arg4" val="0"/>
    <Str sr="arg5" ve="3"/>
    <Int sr="arg6" val="1"/>
    <Str sr="arg7" ve="3"/>
    </Action>
    <Img sr="icn" ve="2">
    <nme>hd_aaa_ext_rain</nme>
    </Img>
    </Task>
    </TaskerData>

好的,保存完上述内容后,请将其复制到手机上易于查找的位置。

启动Tasker并长按“配置文件”选项卡。放开后,选择导入并找到XML文件。

它现在的工作方式是它会在上午8点开火,只有当它插入充电器时才会发射。它只会在周一到周五运行。

随意更改时间,但请尝试将其保持在正常时间。我添加了一个额外的条件,只有它也连接到我的家庭wifi。

好的,现在让我们开始定制它供你使用: 1:打开任务并点击第3个操作“HTTP Get”     现在我在那里有以下内容:

data/2.5/forecast?q=Cape%20Town&amp;mode=xml&amp;units=metric
直接蝙蝠,您将要将城市从“Cape%20Town”更改为您的城市名称。要在OpenWeatherMap上查找您的城市名称,请使用此页面:http://openweathermap.org/find?q= 如果您的城市名称中包含2个或更多字词,请将其与“%20”分隔,而不是空格。 “洛%20Angeles”

如果你是一个有核心温度的极客,如果你希望当天的最高温度以开尔文读给你,你可以取出“单位=公制”,否则,如果你是,那么事物的帝国方面用“帝国”取代“度量”。

现在是重要的一部分;最后,输入&amp; APPID = {key}(将{key}替换为您从OpenWeatherMap获得的API密钥。

好的,现在解释其余的行动:

1: Changes time from "8.00" to "08" and "00"
2: Changes "08" to "8"
3: Gets the weather info and writes it to a temporary file: jim.xml (So I'm a bit vain :-p)
4: Reads that file to a variable called %jim (So I'm a bit vain, AND don't have much imagination :-p)
5: Trims that variable down from a 5-day forcast to a rest-of-the-day forcast
6: Gets the 4 maximum temps for the rest of the day and puts them in an array
7-10: Trims down the values of the array to JUST the tempratures
11: Sets the value of max(1) to a new variable "maxmax" (I know my naming sucks lack of imagination mentioned above)
12-14: If max(2) is bigger than maxmax, then sets value of max(2) to maxmax
15-17: If max(3) is bigger than maxmax, then sets value of max(3) to maxmax
18-20: If max(4) is bigger than maxmax, then sets value of max(4) to maxmax
21-23: Uses regex to pull the value of the cloud cover to variable %clouds
24-26: Uses regex to pull the value of the wind direction to variable %from
27-29: Uses regex to pull the value of the wind strength to variable %wind
30: Sets media stream volume to 10 (out of 15)
31: Reads the weather pulling the values from all the variables.

一些注意事项:
与大多数编程语言一样,Tasker的数组编号从1开始,而不是0。使用变量搜索和替换每次都会创建一个数组,因此在创建它之后,要访问它,您必须访问%var(1),而不仅仅是%var。

可能有一种更有效的方法将max()数组缩减到一个值以找到最高温度,但我不是计算机科学专业的学生,​​所以它足够好了。如果其他人想要创建一个wiki来找到最优化的方法,请成为我的客人。

我已经说过“早上好,现在是早上8点”......随意更改触发时间,只要是早上(和小时),它就可以正常工作。

热切希望看到您对此所做的评论和升级/更改。

我还使用了IVONA TTS语音。默认的安卓系统并不令人愉快。

答案 1 :(得分:1)

看看AlarmPad应用程序。它具有出色的Tasker集成和内置天气(以及其他内容)检查

答案 2 :(得分:0)

我还使用Wunderground API创建了另一个(也许更好)。 (您需要在此处获取免费的API密钥:www.wunderground.com/weather/api/并将其插入下面的代码中,其中包含&#34; Insert-API-Key-HERE&#34; on第281行

SUPER很容易从wunderground获得一把钥匙!注册一个免费帐户(他们不会给您带来麻烦)。 - LINK!(完全披露:如果你使用该链接,我会得到&#34;雨滴&#34;来自wunderground)

这次我从网站获取JSON而不是XML。

另外:加入奖金!我现在使用的是地理位置,而不是硬编码的城市。

Tasker使用XML导入/导出,所以这里是...... XML:

代码转移到JSFiddle - XML是28,000个字符,然后添加解释,它使它达到47,000左右(这就是错误所说的,而Stackoverflow只占用了30,000个字符)回答窗口。

因此,从HTML窗口复制代码。并读取CSS窗口中的指令,并忽略输出窗口

http://jsfiddle.net/blyzz/3os8ayo5/

代码的开头和结尾是:

    <TaskerData sr="" dvi="1" tv="4.6u3m">
    </TaskerData>

如果您需要对行动进行解释,请告诉我。