投稿

ラベル(gae-java)が付いた投稿を表示しています

はてなブックマークへ新規追加したページとコメントの情報をGAE側で受け取りブログへメール投稿する。

□やりたかったこと はてなブックマークへ新規追加したページとコメントの情報をGAE側で受け取って 一日一回Blogサイトへメールで投稿する。 □用意 ・はてなブックマークWebHookの設定および仕様 http://developer.hatena.ne.jp/ja/documents/bookmark/apis/webhook ・Apache Commons Lang(v3.1) http://commons.apache.org/proper/commons-lang/ 一部の文字列処理のため 作成したクラス ・Servletクラス:HBCatch.java… はてなブックマークWebHookが送ってくるリクエストを受け取ってDatastoreに保存する。 ・HBAction.java…HBModelの示すKindを操作するクラス ・HBModel.java…保存用のデータを表すクラス ・Servletクラス:HBMail.java… HBModelとして保存されたデータをまとめて指定されたメールアドレスへ送信するサーブレット。CronによるKickを想定 □ソース 置き換える必要があるデータ: ・ yourpkg はお使いのJavaパッケージ名 ・ {KeyString} はWebHook側で指定したKeyの文字列 ・ {AppID} はAppEngineでのアプリケーションID( http://●.appspot.com の●部分) ・ blogpostaddress@example.com はブログサイトのメール投稿用のアドレス ■Servletクラス:HBCatch.java ------------------------------------- package yourpkg ; import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.datas...

GoogleAppEngine for JavaのMailAPI使用時の文字化けについて

今更ながら。 GAE/Jでメール送信するときに            javax.mail. Message msg = new MimeMessage(session);           msg.setFrom(new InternetAddress("sender@{AppID}.appspotmail.com"));           msg.addRecipient(Message.RecipientType.TO,                            new InternetAddress(" moblog@example.com "));           ((MimeMessage)msg).setSubject(mailsubject,"UTF-8"); //文字化け対策           msg.setText(msgBody);           Transport.send(msg); というようなことをしていたけど、 Google App Engineでよくある質問 - あおうさ@日記:   http://d.hatena.ne.jp/bluerabbit/20100129/1264771990   このような記事があったので試してみ...

Datastore Index Write Opsの節約術について

appengine ja night #18で分かった、Google App Engineの課金の仕組み、節約術・自分用まとめ - えいのうにっき

GAE Java SDK 1.7.7にしたらJSPコンパイルエラー

イメージ
・・・いろいろはまってたがGAEやJavaのバージョンが原因でなくて 単にInstalled JREsがあくまでJREであってJDKのパスではなくなっていたことが原因。 環境 Windows8 Pro(64bit) JDK1.7.0_21 (64bit) Eclipse Juno SR2(64bit) Google App Engine Java SDK 1.7.7.1 症状 JDKのメジャーバージョンアップ後、プロジェクトのJSPファイルに×マークがつく コンパイルするとJSPのコンパイルが出来ない旨のエラーメッセージが出力される。 診断 Window->Preferences->Java->Installed JREs 設定済みのJREをEditボタンで開いてJRE_HOMEがJREかJDKどちらのパスになっているか 確認する。 例: ・JDKの場合 C:\Program Files\Java\jdk1.7.0_21 ・JREの場合 C:\Program Files\Java\jre7 対処 JRE_HOMEのパスをJDKのパスに設定しなおせばJSPファイルがエラー扱いされることはなくなるはず。

[GAE/J]cron.xmlの設定

cron.xmlの設定で<schedule>の指定を時刻帯によって 頻繁にしたり疎にできないか調べてて日本語のヘルプでは情報が足りてなくて 英語版みたらすぐに解決した。 https://developers.google.com/appengine/docs/java/config/cron?hl=ja 実行のタイミングをもっと細かく設定したい場合は、次のようにスケジュールを指定できます。 ("every"|ordinal) (days) ["of" (monthspec)] (time) https://developers.google.com/appengine/docs/java/config/cron?hl=en If you don't need to run a recurring job at a specific time, but instead only need to run it at regular intervals, use the form: every N (hours|mins|minutes) ["from" (time) "to" (time)] というわけで大体こんな感じで <?xml version="1.0" encoding="UTF-8"?> <cronentries>        <cron>     <url>/ss</url>     <description>Cron1-Evening</description>     <schedule>every 30 minutes from 18:00 to 21:00</schedule>     <timezone>Asia/Tokyo</timezone>   </cron>      <cron> ...

[java]Subject.txtスレ一覧からスレッドIDとタイトルとレス数を取り出す

package test; import java.io.*; import java.net.*; import java.util.*; public class Run { public static void main(String[] args) { List<String> entries = new ArrayList<String>(); URL url; BufferedReader reader; try { url = new URL("http://jbbs.livedoor.jp/otaku/12973/subject.txt"); reader = new BufferedReader(new InputStreamReader(url.openStream(),"EUC-JP")); String line; while ((line = reader.readLine()) != null) { entries.add(line); } reader.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace();     } for (String str:entries){ Integer id=Integer.parseInt(str.substring(0,10)); int resnum_start=str.lastIndexOf('('); int resnum_end=str.lastIndexOf(')'); Integer num = Integer.parseInt(str.substring(resnum_start+1,resnum_end)); String title=str.substring(0,resnum_start).split(",")[1]; System.out.print...

Javaの文字列配列から文字データを取り出して指定したセパレータで分けてDatastoreにKind名を指定して保存する

Javaの文字列配列から文字データを取り出して指定したセパレータで分けてDatastoreにKind名を指定して保存する  String[] rssnewslist ={    "痛いニュース(ノ∀`)|http://blog.livedoor.jp/dqnplus/index.rdf",    "無題のドキュメント|http://www.mudainodocument.com/index.rdf",    "VIPPERな俺|http://blog.livedoor.jp/news23vip/index.rdf",    "【SS宝庫】みんなの暇つぶし(ノ^^)八(^^ )ノ|http://blog.livedoor.jp/minnanohimatubushi/index.rdf"  };  String[] rssaalist = {    "AAまとめブログ|http://blog.livedoor.jp/aamatome/index.rdf",    "やる夫観察日記|http://yaruokansatu.blog44.fc2.com/?xml",    "俺得やる夫やらまとめ|http://oretokuyaruoyara.blog101.fc2.com/?xml",    "やる夫.jp|http://blog.livedoor.jp/nyusokudeyaruo/index.rdf",  };  public void reg(String[] array,String kind){   ds.put(reg_action(array,kind));  }  List<Entity> reg_action(String[] array,String kind){   List<Entity> tempiter = new ArrayList<Entity>()...

[GAE/Java] 指定したRSSフィードのタイトルとURLを取り込んだり表示したりする

指定したRSSフィードのタイトルとURLを取り込んだり表示したりする。 RSSの取得に HorroRSS を使用 実際のEntityはKind名 "Link"だけだけど、親Keyとして"Feed"というKind名を割り当てて保存 ParentKey                                                        Key ======================================     ========================================= Kind       Name(ID)                                           /   Kind:    Name(ID) ======  ===============================     =====  ================================= "Feed"  http://hogehoge1.example.com/?xml    / "Link" http://hogehoge1.example.com/ent1.html "Feed"  http://hogehoge1.example.com/?xml    /  "Link" http://hogehoge1.example.com/ent2.html "Feed"  http:/...

App Engine for Java: Multitenancy and Namespace API 感想

データリークを防ぐ機能はフレームワーク任せかなあ キーとクエリーに直接名前空間をセットできないのは苦労しそう。インターフェイスが仕様大幅に変わるから? キーとクエリーの使用に名前空間指定を強制させる設定とか出来ないかしら。

Google Appengine for Java: Remote API for Java

RemoteAPIを使うと、Eclipseはあるに越したことはないけど コマンドベースでもGAEを結構使えてしまう。 Remote API for Java - Google App Engine http://code.google.com/intl/en/appengine/docs/java/tools/remoteapi.html 英語版をみること。 web.xmlに以下の設定を追加。 <servlet> <display-name>Remote API Servlet</display-name> <servlet-name>RemoteApiServlet</servlet-name> <servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>RemoteApiServlet</servlet-name> <url-pattern>/remote_api</url-pattern> </servlet-mapping> 通常どおりDeployする。設定としては基本的にこれでOK。 以下のようにプログラムを書く(そのままコピーだけど) package remoteapiexample; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; import com.google.appengine.tools.remoteapi.RemoteApiInstaller; import com.google.ap...