<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>tomatomax.net &#187; iAppli</title>
	<atom:link href="http://blog.tomatomax.net/archives/category/program/iappli/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.tomatomax.net</link>
	<description>Every rule has its exception.</description>
	<lastBuildDate>Wed, 07 Jul 2010 08:41:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.tomatomax.net/archives/category/program/iappli/feed" />
		<item>
		<title>GoogleCalendarImporter</title>
		<link>http://blog.tomatomax.net/archives/2351</link>
		<comments>http://blog.tomatomax.net/archives/2351#comments</comments>
		<pubDate>Fri, 21 Mar 2008 15:00:00 +0000</pubDate>
		<dc:creator>maruguu</dc:creator>
				<category><![CDATA[iAppli]]></category>

		<guid isPermaLink="false">http://blog.tomatomax.net/archives/2351</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>Googleカレンダーのデータを携帯のスケジューラで読み込めるようにするiアプリを作ってみました。iCal形式ならGoogleカレンダーである必要はないのだけれども、iアプリの仕様上、データをiアプリと同じサーバに置かないといけないので、完全に個人用ツール。</p>
<p>あとはScheduleクラスがaddEntry()しかできないので、重複排除みたいなことができないとか、ToDoの方はいじることができないとか、痒くてたまらない感じ。</p>
<p>一応ソース。エラー処理がほとんど入ってない、、、</p>
<p><a name="seemore"></a></p>
<pre class="syntax-highlight">
<span class="synPreProc">import</span> javax.microedition.io.*;
<span class="synPreProc">import</span> java.io.*;
<span class="synPreProc">import</span> java.util.*;
<span class="synPreProc">import</span> com.nttdocomo.ui.*;
<span class="synPreProc">import</span> com.nttdocomo.io.*;
<span class="synPreProc">import</span> com.nttdocomo.system.*;
<span class="synPreProc">import</span> com.nttdocomo.util.*;

<span class="synType">public</span> <span class="synType">class</span> GoogleCalendarImporter <span class="synType">extends</span> IApplication {
appCanvas m_canvas;

<span class="synType">public</span> <span class="synType">void</span> start() {
m_canvas = <span class="synStatement">new</span> appCanvas();
Display.setCurrent(m_canvas);
}

<span class="synType">   class</span> appCanvas <span class="synType">extends</span> Canvas {
<span class="synType">public</span> appCanvas() {
setSoftLabel(SOFT_KEY_1,<span class="synConstant">&#34;ADD&#34;</span>);
setSoftLabel(SOFT_KEY_2,<span class="synConstant">&#34;QUIT&#34;</span>);
}

<span class="synType">public</span> <span class="synType">void</span> paint(Graphics g) {
g.drawString(<span class="synConstant">&#34;Google Calendar Importer&#34;</span>,<span class="synConstant">0</span>,<span class="synConstant">30</span>);
}

<span class="synType">public</span> <span class="synType">void</span> processEvent(<span class="synType">int</span> type,<span class="synType">int</span> param) {
<span class="synStatement">if</span> (type==Display.KEY_RELEASED_EVENT) {
<span class="synStatement">if</span> (param==Display.KEY_SOFT2) {
terminate();
}
<span class="synStatement">if</span> (param==Display.KEY_SOFT1) {
String ics = getICSData(<span class="synConstant">&#34;gc.ics&#34;</span>);
Vector vevents = getVevents(ics);
ScheduleDate sdate;
<span class="synStatement">for</span>(<span class="synType">int</span> i = <span class="synConstant">0</span>; i &#60; vevents.size(); i++) {
sdate = getSchedule((String)vevents.elementAt(i));
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(<span class="synConstant">&#34;GMT&#34;</span>));
<span class="synType">int</span> year = cal.get(Calendar.YEAR);
<span class="synType">int</span> month = cal.get(Calendar.MONTH) + <span class="synConstant">1</span>;
<span class="synType">int</span> day = cal.get(Calendar.DATE);
<span class="synStatement">if</span>((year &#60; sdate.get(Calendar.YEAR)) ||
(((year == sdate.get(Calendar.YEAR)) &#38;&#38; (month &#60; sdate.get(Calendar.MONTH) + <span class="synConstant">1</span>))) ||
(((year == sdate.get(Calendar.YEAR)) &#38;&#38; (month == sdate.get(Calendar.MONTH) + <span class="synConstant">1</span>)) &#38;&#38; (day &#60;= sdate.get(Calendar.DATE))))
{
<span class="synStatement">try</span> {
Schedule.addEntry(getSummary((String)vevents.elementAt(i)), sdate, <span class="synConstant">false</span>);
} <span class="synStatement">catch</span>(InterruptedOperationException e) {
}
}
}

}
}
}

String getSummary(String vevent) {
String summary = <span class="synConstant">&#34;SUMMARY:&#34;</span>;
<span class="synStatement">try</span> {
<span class="synType">int</span> pos_s = vevent.indexOf(summary);
<span class="synType">int</span> pos_e = vevent.indexOf(<span class="synConstant">&#34;</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>, pos_s);
<span class="synStatement">return</span> vevent.substring(pos_s + summary.length(), pos_e);
} <span class="synStatement">catch</span> (Exception e) {
<span class="synStatement">return</span> vevent;
}
}

<span class="synType">int</span> getInt(String str) {
<span class="synType">int</span> start = <span class="synConstant">0</span>;
<span class="synStatement">while</span>(start &#60; str.length() - <span class="synConstant">1</span>) {
<span class="synStatement">if</span>(str.charAt(start) == <span class="synConstant">'0'</span>) {
start++;
} <span class="synStatement">else</span> {
<span class="synStatement">break</span>;
}
}
<span class="synStatement">return</span> Integer.parseInt(str.substring(start));
}

ScheduleDate getSchedule(String vevent) {
ScheduleDate sdate = <span class="synStatement">new</span> ScheduleDate(ScheduleDate.ONETIME);
<span class="synStatement">try</span> {
<span class="synType">int</span> pos_dt = vevent.indexOf(<span class="synConstant">&#34;DTSTART&#34;</span>);
<span class="synType">int</span> pos_s = vevent.indexOf(<span class="synConstant">&#34;:&#34;</span>, pos_dt);
sdate.set(Calendar.YEAR, Integer.parseInt(vevent.substring(pos_s + <span class="synConstant">1</span>, pos_s + <span class="synConstant">5</span>)));
sdate.set(Calendar.MONTH, getInt(vevent.substring(pos_s + <span class="synConstant">5</span>, pos_s + <span class="synConstant">7</span>)) - <span class="synConstant">1</span>);
sdate.set(Calendar.DATE, getInt(vevent.substring(pos_s + <span class="synConstant">7</span>, pos_s + <span class="synConstant">9</span>)));
<span class="synStatement">if</span>(vevent.charAt(pos_s + <span class="synConstant">9</span>) == <span class="synConstant">'T'</span>) {
sdate.set(Calendar.HOUR_OF_DAY, getInt(vevent.substring(pos_s + <span class="synConstant">10</span>, pos_s + <span class="synConstant">12</span>)));
sdate.set(Calendar.MINUTE, getInt(vevent.substring(pos_s + <span class="synConstant">12</span>, pos_s + <span class="synConstant">14</span>)));
}
} <span class="synStatement">catch</span> (Exception e) {
}
<span class="synStatement">return</span> sdate;
}

Vector getVevents(String ics) {
Vector vevents = <span class="synStatement">new</span> Vector();
<span class="synStatement">try</span> {
<span class="synType">int</span> pos_s = ics.indexOf(<span class="synConstant">&#34;BEGIN:VEVENT&#34;</span>);
<span class="synType">int</span> pos_e;
<span class="synStatement">while</span>(pos_s &#62;= <span class="synConstant">0</span>) {
pos_e = ics.indexOf(<span class="synConstant">&#34;END:VEVENT&#34;</span>, pos_s);
vevents.addElement(ics.substring(pos_s, pos_e));
pos_s = ics.indexOf(<span class="synConstant">&#34;BEGIN:VEVENT&#34;</span>, pos_e);
}
} <span class="synStatement">catch</span> (Exception e) {
}
<span class="synStatement">return</span> vevents;
}

String getICSData(String ics) {
HttpConnection wi_connect;
<span class="synStatement">try</span> {
String wi_url = <span class="synStatement">new</span> String(getSourceURL() + ics);
wi_connect = (HttpConnection)Connector.open(wi_url,Connector.READ_WRITE,<span class="synConstant">true</span>);
wi_connect.setRequestMethod(HttpConnection.GET);
wi_connect.connect();

InputStream wi_stream = wi_connect.openInputStream();
InputStreamReader wi_buffer = <span class="synStatement">new</span> InputStreamReader(wi_stream);
StringBuffer w_StringBuffer = <span class="synStatement">new</span> StringBuffer();
String w_buffer = <span class="synConstant">&#34;&#34;</span>;

<span class="synType">int</span> w_char;
<span class="synStatement">while</span> ((w_char = wi_buffer.read()) != -<span class="synConstant">1</span>) {
w_StringBuffer.append((<span class="synType">char</span>)w_char);
}

w_buffer = (String)w_StringBuffer.toString();
wi_stream.close();
wi_connect.close();
<span class="synStatement">return</span> w_buffer;
} <span class="synStatement">catch</span>(Throwable e) {
System.out.println(<span class="synConstant">&#34;getICSData() : &#34;</span> + e.getMessage());
}
<span class="synStatement">return</span> <span class="synConstant">&#34;&#34;</span>;
}
}
}
</pre>
</div>
<p><script type="text/javascript"><!--
google_ad_client = "pub-0582565723906120";
/* 336x280, 作成済み 10/04/25 */
google_ad_slot = "6994973421";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<script type="text/javascript"><!--
google_ad_client = "pub-0582565723906120";
/* 200x90, 作成済み 10/04/25 */
google_ad_slot = "9492987907";
google_ad_width = 200;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tomatomax.net/archives/2351/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.tomatomax.net/archives/2351" />
	</item>
	</channel>
</rss>
