2011年12月4日星期日

免费天气预报weatherlib部署方法(1-23更新)

     2013-1-23 Update:

网友需求,在邮件后面不要加上“管理订阅XXX”,我修改了一下代码,另外上传了一个weatherlib_nohelp.zip 也是在同样下载的地方

     2012-6-25 Update:

网友反映无法部署,根据提示,是因为GAE升级了,需要在appengine-web.xml 第四行(<version>4</version>)后面加入以下一行:<threadsafe>true</threadsafe>

  2011-12-10 Update:

更新程序,天气邮件中的网址http://weather.terrynow.com改成各自的http://yourappid.appspot.com
说明:
1) 如果您部署本程序,如果修改首页,希望你能保留我的博客等版权信息和广告的内容(当然也不能强迫哈)
2) 现在程序默认总定制数是80个,单个用户的定制数是10个,考虑到总的邮件数是100,另外还有发送验证邮件、测试邮件或者发送错误重新发送等原因,总定制数为80,如果你要修改总定制数,可以搜索代码里出现的80的地方改成你想要的数字(少于100),单个用户的定制数默认是10,代码中可以改,或者到https://appengine.google.com后台,点击Datastore Viewer,找到Account下的账户,把slimit的数值,从10改成其他你想要的。

2011-12-9 Update:

  1.       更新代码修正有时无法查询天气的问题
  2.       更新代码修正只能发送测试邮件,无法定时发送的问题
  3.       可以用war包上传办法,从而不需要Eclipse了,详见最后的说明

      自Google把免费配额降低后(一天只能发100封邮件),本人就打算放弃这个项目了,不过还是有很多热心网友一直询问进展,我也是忙着忙那,来不及管这些,不过zhen zhao 网友一直不懈努力,终于搞出来了,呵呵,可喜可贺,并把他的一路忙下来的教程发给我,让我公布到博客上,这里也感谢这位网友!


1、 http://www.oracle.com/technetwork/java/javase/downloads/index.html,下载jdk,建议下载1.6(JDK6),默认安装。
2、 http://www.eclipse.org/downloads/,下载Eclipse,解压到D:。打开d:\eclipse,运行eclipse.exe,点help菜单下的install new softwore,在work with 填写http://dl.google.com/eclipse/plugin/3.7
(这里补充下,截图里的第三个GWT Designer for GPE可不用勾上)
漫长的等待,点下一步安装。

安装完成后Eclipse重启。图标G出现就安装成功了。呵呵,要有耐心哦。
2、 下载Google App Engine SDK for Java, https://code.google.com/intl/zh-CN/appengine/downloads.html,解压到D:
3、 下载weatherlib源代码(GoogleCode上的比较老了,请下载最新的,点这里),解压weatherlib。
4、 打开Eclipse的file下Import,  下一步。Browse找到weatherlib,点击finish。

5、 按ALT加ENTER键,Txt file encoding , 改成UTF-8

java Build path ,App Engine SDK,找到解压到D:的appengine-java-sdk-1.6.0导入,JRE system library 找到安装的JDK目录导入。


6、 
deploy to app engine , 改为自己的
,Deploy,成功了。





新增的war包部署方法:

1)同样需要下载JDK,详见上面步骤的第一步
2)下载Google App Engine SDK for java 详见第三步
3)点这里下载代码后,解压找到里面的war包,距离war包的地址是D:\weatherlib\war
修改D:\weatherlib\war\WEB-INF\appengine-web.xml 把这里的your_app_id 的your_app_id换成你实际的ID
4)开始-运行-cmd
切换到你的Google App Engine的SDK的目录的bin下:
比如


C:\Documents and Settings\user>e:
E:\>cd appengine-java-sdk\bin\
E:\appengine-java-sdk\bin>appcfg.cmd update D:\weatherlib\war


根据提示输入用户名和密码就可以了

47 条评论:

xysmzp 说...

感谢Terry为我们提供这么好的天气程序。非常实用,感谢Terry的热情帮助!

Terry 说...

@xysmzp 你客气啦:)也谢谢你提供教程!

Deccin 说...

非常感谢二位的辛勤劳动了!本来已经放弃等待了,没想到还有新的进展!
这两天一直在准备学习GAE的知识,因为账号早就申请好了的,回来转转,没想到教程出来了,非常高兴啊!
希望教程能帮助更多的人了解GAE,同时也希望它能帮助更多有需要的人!让我们一起努力!

尚善若水 说...

非常感谢二位
折腾了几天
终于成功了

说明一下
由于墙的问题
直接上传会失败。。。

尚善若水 说...

大神请帮忙

部署成功了
就是不能自动发邮件
是啥问题?

Deccin 说...

我上传后出现500server error:

Error: Server Error

The server encountered an error and could not complete your request.
If the problem persists, please report your problem and mention this error message and the query that caused it.

这个又是什么问题呢?

Terry 说...

楼上两位,你们检查下,你的Eclipse项目里,war/WEB-INF/lib下是否有一下这些jar,
如果没有,就去Google的SDK里copy过去,或者到Problem下去修复
appengine-api-1.0-sdk-1.6.0.jar
appengine-api-labs-1.6.0.jar
appengine-jsr107cache-1.6.0.jar
commons-logging-1.1.1.jar
datanucleus-appengine-1.0.10.final.jar
datanucleus-core-1.1.5.jar
datanucleus-jpa-1.1.5.jar
geronimo-jpa_3.0_spec-1.1.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
jdo2-api-2.3-eb.jar
jsoup-1.3.1.jar
jsr107cache-1.1.jar
org.json.jar

尚善若水 说...

这些个jar都是有的
部署成功
测试邮件也可以发送
就是定时邮件发不出去。。。

Terry 说...

我在想想办法,检查一下什么原因,到时候再公布!

Terry 说...

今天又更新了代码,请再看下博客再重新上传试试看

尚善若水 说...

这次可以了
非常感谢啊

Deccin 说...

经过Terry无数次的调试,这次终于可以啦!
再次感谢Terry所付出的努力!

尚善若水 说...

请问下
每个邮箱限定两条的设置在哪里改?

Terry 说...

java代码:
com.terry.weatherlib.servlet.WebManagerServlet
大概453行:
int ecount = getEmailScheduleCount(email);
if ((!update && ecount >= 2)
|| (update && schedule != null
&& !schedule.getEmail().equals(email) && ecount >= 2)) {
try {
jo.put("message", "接收邮箱" + email + "已定制" + ecount
+ "条,为了让他人有机会定制,暂时无法为您保存");
} catch (JSONException e) {
}
return jo;
}

其实你可以搜索下相关的提示语,就可以了

dominus.illuminatio.mea 说...

首先感谢Terry的聪明智慧和辛苦工作
这里有一事请教:
按照"war包部署方法",
执行 appcfg.cmd update C:\weatherlib\war 后提示失败
log如下:
Unable to update: com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files. at com.google.appengine.tools.admin.Application.compileJsps(Application.java:582) at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:434) at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:311) at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52) at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:619) at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:160) at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:67) at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:63) com.google.appengine.tools.admin.AdminException: Unable to update app: Failed to compile jsp files. at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:318) at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52) at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:619) at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:160) at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:67) at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:63) Caused by: com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files. at com.google.appengine.tools.admin.Application.compileJsps(Application.java:582) at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:434) at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:311) ... 5 more

请问有没有什么办法解决?

多谢您的宝贵答复,
:-)

Terry Yao 说...

Eclipse中确保用的是JDK而不是JRE
Windows-Preferences-Java-Installed JREs
如果右边显示的是JRE而不是JDK,请修改路径,默认按照java的路径,有个JRE,不过也有JDK,你稍微修改下。

dominus.illuminatio.mea 说...

请教:
第5步,弹出错误提示:
Java Virtal Machine Launcher
Could not find the main class: com.google.appengine.tools.enhancer.Enhancer. Program will exit.

控制台
java.lang.NoClassDefFoundError: com/google/appengine/tools/enhancer/Enhance
Caused by: java.lang.ClassNotFoundException: com.google.appengine.tools.enhancer.Enhance
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main"

已经爬文没找到解决方法.
新手, 请多多指教!
感谢您的宝贵时间和答复 :-)

Terry Yao 说...

这个我也不太清楚了,要么你Project-Clean一下,要不然你就用第二种war包部署方法吧。

WavierLEE 说...

你好,Terry,部署时出现“403 Forbidden
You do not have permission to modify this app (app_id=u'wavesdk').”
而且我也没有在appengine-web.xml中找到your_app_id字样。
谢谢!

Terry Yao 说...

@WavierLEE 我重新上传了,你再下载一次weatherlib.zip, 这次你能找到your_app_id了

Wavier LEE 说...

谢谢,Terry, THX !

寒冰 说...

出现提示 an error occurred at line :-1 in the generated java file

寒冰 说...
此评论已被作者删除。
田鼠 说...

Unable to update:
com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files.
at com.google.appengine.tools.admin.Application.compileJsps(Application.java:614)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:465)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:327)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:641)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:172)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)
com.google.appengine.tools.admin.AdminException: Unable to update app: Failed to compile jsp files.
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:333)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:641)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:172)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)
Caused by: com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files.
at com.google.appengine.tools.admin.Application.compileJsps(Application.java:614)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:465)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:327)
... 5 more
我的是JDK

NOAH 说...

部署了之后139邮箱收不到验证码,测试邮件可以收到,换用QQ邮箱也可以收到验证码,怎么回事啊?

Terry Yao 说...

@田鼠 你检查下Eclipse的Project的BuildPath中的是不是jre还是jdk,装了jdk,他可能还是认到jre的
@NOAH 那这样的情况没办法解释啊。。。

匿名 说...

我试验了一下,139邮箱收不到是由于验证码邮件主题中数字过多导致的,用其他邮箱发同样主题的邮件139邮箱也是收不到,修改邮件主题就可以了。在哪里可以修改验证邮件的主题?

Terry Yao 说...

@noah 在src/com/terry/weatherlib/servlet/WebManagerServlet.java
这些需要修改源代码方式编译部署。

mawith 说...

在网吧历尽千辛万苦破解若干限制,终于上传成功。上来喘口气。若遇到编译不成功的同学可以考虑一下java的环境变量有没有设置好。上传最好开VPN。

田鼠 说...

我已经部署上去了,但是一直提示服务器错误,具体的我已经发G+邮件了

Terry Yao 说...

田鼠 什么情况,你按照说明一步步做,其他网友都正常的哦

田鼠 说...
此评论已被作者删除。
田鼠 说...

终于搞定了,原来是版本错了。顺便问一下,验证码怎么取消?

亮亮坨坨 说...

非常感谢Terry提供源码!

亮亮坨坨 说...

刚刚尝试着直接部署了下,一直报一个错误:
com.google.apphosting.utils.config.AppEngineConfigException: appengine-web.xml does not contain a element.


请问这个是java这边的问题还是什么问题呀?

亮亮坨坨 说...
此评论已被作者删除。
http://youandme.ws 说...

按照部署war的方法做的:
工具版本分别是jdk1.6.0_33
appengine-java-1.6.6
上传不成功,log如下:
com.google.apphosting.utils.config.AppEngineConfigException: appengine-web.xml does not contain a element.
See http://code.google.com/appengine/docs/java/config/appconfig.html#Using_Concurrent_Requests for more information.
You probably want to enable concurrent requests.
at com.google.apphosting.utils.config.AppEngineWebXmlReader.readAppEngineWebXml(AppEngineWebXmlReader.java:79)
at com.google.appengine.tools.admin.Application.(Application.java:139)
at com.google.appengine.tools.admin.Application.readApplication(Application.java:225)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:145)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)

请terry看看

Terry Yao 说...

不好意思,之前一直忙没有打理这个程序了,估计因为GAE升级了,而这个程序比较旧,根据日志提供的线索,你找到appengine-web.xml,在第四行后面加上一行:
(无法显示在评论里,具体看我的blog的update)
再试试看

aaa 说...
此评论已被作者删除。
aaa 说...

按照部署war的方法做的:
工具版本分别是jdk1.71
appengine-java-1.6.6
上传不成功,log如下:

Unable to update:
com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files.
at com.google.appengine.tools.admin.Application.compileJsps(Application.java:710)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:551)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:327)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:951)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:198)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:91)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:87)
com.google.appengine.tools.admin.AdminException: Unable to update app: Failed to compile jsp files.
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:333)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:951)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:198)
at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:91)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:87)
Caused by: com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files.
at com.google.appengine.tools.admin.Application.compileJsps(Application.java:710)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:551)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:327)
... 5 more

cjf 说...

博主你好,我已经布置好了,功能也正常,非常感谢。就是短信内容有点长了,我收到的短信分成了2条。我想问一下,如何去掉短信中“管理订阅请登录http://cjfcome9.appspot.com
请勿直接回复
”这句话?

Terry Yao 说...

+cjf 我给你改了一个包,上传好了

cjf 说...

你的回复速度赶得上顺风快递了!感谢!
但下载了weatherlib_nohelp.zip并重新上传war后,出现了问题。在新建订阅时,无论发送验证码,还是发送测试邮件,都提示服务器错误。然后上传老的war,一切正常。试了几次,都是这样,麻烦你看看怎么回事?或者能不能直接修改老的java文件,再上传?是不是WeatherMailSender.java文件?

Terry Yao 说...

+cjf 我又上传了一次,你重新下载那个nohelp试试,可能上次编译的有点问题,当然你自己修改也是可以的,确实是WeatherMailSender.java,大概57行后面,help=HELP_STOP;再多加一行help="";,考虑到需要编译,我就上传好了。如果还是有问题,再和我说。

cjf 说...

成了!新的nohelp没问题。再次感谢。























youtube downloader

newcastle 说...

最近试验了一下,139\189\邮箱收不到是验证码,而测试邮件可以收到,189邮箱收到的邮件主题是"??????????--2013??4??23?? 11?????"(正确的是:长沙天气预报--2013年4月23日 11时发布),可以修改一下去掉验证码么

月落 说...

最近有半个月天气预报都很不准,温度,天气和气象台网站差很多,请有时间看看