我想在我的Android手机上创建一个应用程序,告诉我每天早上一段时间的天气,并找到许多网站告诉你如何做,但没有一个真的让它变得容易编辑他们的任务 - 没有真正的文档。此外,有些人有下载任务或配置文件的链接,但它们要么是死链接,要么按原样给出,没有任何解释。
所以我就是这么做的。
答案 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&mode=xml&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&mode=xml&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>
如果您需要对行动进行解释,请告诉我。