<?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/"
	>

<channel>
	<title>iphoneアプリで稼げるのか</title>
	<atom:link href="http://iphone.longearth.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://iphone.longearth.net</link>
	<description></description>
	<lastBuildDate>Sun, 08 Aug 2010 21:05:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>いろいろまとめてOAuthEcho</title>
		<link>http://iphone.longearth.net/2010/08/09/oauthecho%e3%81%84%e3%82%8d%e3%81%84%e3%82%8d%e3%81%be%e3%81%a8%e3%82%81/</link>
		<comments>http://iphone.longearth.net/2010/08/09/oauthecho%e3%81%84%e3%82%8d%e3%81%84%e3%82%8d%e3%81%be%e3%81%a8%e3%82%81/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 21:03:59 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[iphone開発]]></category>
		<category><![CDATA[OAuthEcho]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1950</guid>
		<description><![CDATA[
TwitPicのOAuthEcho対応 &#124; iphoneアプリで稼げるのか
TweetPhotoのOAuthEcho対応 &#124; iphoneアプリで稼げるのか

１つずつ分けて書くのがとても面倒になってきたので書き散らか [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/">TwitPicのOAuthEcho対応 | iphoneアプリで稼げるのか</a><br />
<a href="http://iphone.longearth.net/2010/08/08/tweetphoto%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/">TweetPhotoのOAuthEcho対応 | iphoneアプリで稼げるのか</a><br />
<br />
１つずつ分けて書くのがとても面倒になってきたので書き散らかします。<br />
MobyPicture、Twitgoo、Twipl、Posterous、Img.ly、yFrogです。<br />
<br />
ここでもTwitPicでの対応をベースに書いてます。<br />
<span id="more-1950"></span><br />
<h3>MobyPicture</h3>
<a href="http://www.mobypicture.com/">Share your adventures with your friends realtime</a><br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/75b1f0182824f71e9a9adebcb19befae.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/75b1f0182824f71e9a9adebcb19befae-297x300.png" alt="mobypicture" title="mobypicture" width="297" height="300" class="aligncenter size-medium wp-image-1963" /></a><br />
<br />
API Keyはこちら。<a href="http://www.mobypicture.com/app/new">Mobypicture &#8211; Share your adventures with your friends realtime</a><br />
OAuth Echoについてはこちら。<a href="http://developers.mobypicture.com/documentation/authentication/oauth-echo/">OAuth Echo | Mobypicture Developers</a><br />
upload APIはこちら。<a href="http://developers.mobypicture.com/documentation/2-0/upload/">upload | Mobypicture Developers</a><br />
基本はTwitPicと同じでいけます。レスポンスの処理部分でURL含まれる要素が変わるくらい。<br />
<h4>ポスト</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1950code9'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p19509"><td class="code" id="p1950code9"><pre class="objective-c" style="font-family:monospace;">- (void)uploadToTwitterByMobyPicture:(NSString *)tweet image:(UIImage *)image {
	self.lastTweet = tweet;
	NSString *url = @&quot;https://api.mobypicture.com/2.0/upload.json&quot;;
	ASIFormDataRequest *request = [self createOAuthEchoRequest:url];
&nbsp;
	NSData *imageRepresentation = UIImageJPEGRepresentation(image, 1.0);
	[request setData:imageRepresentation forKey:@&quot;media&quot;];
	[request setPostValue:tweet  forKey:@&quot;message&quot;];
	[request setPostValue:mobyPictureApiKey  forKey:@&quot;key&quot;];  
&nbsp;
	[request setDelegate:self];
	[request setDidFinishSelector:@selector(mobyPictureRequestFinished:)];
	[request setDidFailSelector:@selector(requestFailed:)];
&nbsp;
	[request startAsynchronous];
}</pre></td></tr></table></div>

<br />
<br />
<h4>レスポンス</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1950code10'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p195010"><td class="code" id="p1950code10"><pre class="objective-c" style="font-family:monospace;">- (void)mobyPictureRequestFinished:(ASIHTTPRequest *)request
{
	// Use when fetching text data
	NSString *responseString = [request responseString];
	NSLog(@&quot;response:%@&quot;,responseString);
&nbsp;
	NSString *url = [self extractUploadURL:body key:@&quot;mediaurl&quot;];
&nbsp;
	NSLog(@&quot;url:%@&quot;,url);
	if (!url) {
		[self requestFailed:request];
		return;
	}
&nbsp;
	[self.twitterEngine sendUpdate:[NSString stringWithFormat:@&quot;%@ %@&quot;, self.lastTweet, url]];
}</pre></td></tr></table></div>

<br />
<br />
extractUploadURLは<a href="http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/">TwitPicのOAuthEcho対応 | iphoneアプリで稼げるのか</a>で書いたメソッドからKeyを引数に渡せるようにしたものです。<br />
<h3>Twitgoo</h3>
<a href="http://twitgoo.com/">Twitgoo &#8211; Share your pictures on twitter</a><br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/7e83ce897f2725457a04aad5630be564.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/7e83ce897f2725457a04aad5630be564-266x300.png" alt="twitgoo" title="twitgoo" width="266" height="300" class="aligncenter size-medium wp-image-1964" /></a><br />
<br />
API Keyは不要。(ただし、申請すればリンク付きアプリ名を表示させることができる)<br />
APIについてはここからZip、PDF形式で参照できます。<a href="http://twitgoo.com/a/help">Twitgoo &#8211; Help and Feedback</a><br />
twitgooもTwitPicと同じ要領でいけます。ただ、レスポンスはXML。<br />
<h4>ポスト</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1950code11'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p195011"><td class="code" id="p1950code11"><pre class="objective-c" style="font-family:monospace;">- (void)uploadToTwitterByTwitgoo:(NSString *)tweet image:(UIImage *)image {
&nbsp;
	self.lastTweet = tweet;
	NSString *url = @&quot;http://twitgoo.com/api/upload&quot;;
	ASIFormDataRequest *request = [self createOAuthEchoRequest:url];
&nbsp;
	NSData *imageRepresentation = UIImageJPEGRepresentation(image, 1.0);
	[request setData:imageRepresentation forKey:@&quot;media&quot;];
	[request setPostValue:tweet  forKey:@&quot;message&quot;];
&nbsp;
	[request setDelegate:self];
	[request setDidFinishSelector:@selector(twitgooRequestFinished:)];
	[request setDidFailSelector:@selector(requestFailed:)];
&nbsp;
	[request startAsynchronous];
}</pre></td></tr></table></div>

<br />
<br />
<h4>レスポンス</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1950code12'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p195012"><td class="code" id="p1950code12"><pre class="objective-c" style="font-family:monospace;">- (void)twitgooRequestFinished:(ASIHTTPRequest *)request {
	NSString *responseString = [request responseString];
	NSLog(@&quot;response:%@&quot;,responseString);
&nbsp;
	NSString *url = nil;
	NSRange startRange = [responseString rangeOfString:@&quot;&lt;mediaurl&gt;&quot; options:NSCaseInsensitiveSearch];
	if (startRange.location != NSNotFound) {
		NSRange endRange = [responseString rangeOfString:@&quot;&lt;/mediaurl&gt;&quot; options:NSCaseInsensitiveSearch];
		int location = startRange.location + startRange.length;
		int length = endRange.location - location;
		url = [responseString substringWithRange:NSMakeRange(location, length)];
	}
&nbsp;
	NSLog(@&quot;url:%@&quot;,url);
	if (!url) {
		[self requestFailed:request];
		return;
	}
&nbsp;
	[self.twitterEngine sendUpdate:[NSString stringWithFormat:@&quot;%@ %@&quot;, self.lastTweet, url]];
}</pre></td></tr></table></div>

<br />
<br />
<h3>Twipl</h3>
<a href="http://www.twipl.net/public/home">ようこそ。ツイプルへ。</a><br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/e3266c5388071209257c36d48c87c34a.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/e3266c5388071209257c36d48c87c34a-253x300.png" alt="twipl" title="twipl" width="253" height="300" class="aligncenter size-medium wp-image-1965" /></a><br />
<br />
API Key→<a href="http://www.twipl.net/api/reg">Application Registration</a><br />
API→<a href="http://www.twipl.net/api/doc">Twipl Open API</a><br />
<h4>リクエストヘッダ</h4>
Twiplはリクエストヘッダにセットするキーが他のと異なるので注意。<br />
X-OAUTH-AUTHORIZATIONとX-OAUTH-SP-URL。入れる値は同じ。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1950code13'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p195013"><td class="code" id="p1950code13"><pre class="objective-c" style="font-family:monospace;">- (ASIFormDataRequest*)createOAuthEchoRequestForTwipl:(NSString*)url {
	NSString *authorizeUrl = @&quot;https://api.twitter.com/1/account/verify_credentials.xml&quot;;
	NSString *format = @&quot;xml&quot;;
	OAMutableURLRequest *oauthRequest = [[OAMutableURLRequest alloc] initWithURL:[NSURL URLWithString:authorizeUrl]
			consumer:self.twitterEngine.consumer
			token:self.twitterEngine.accessToken
			realm:@&quot;http://api.twitter.com/&quot;
			signatureProvider:nil];
&nbsp;
&nbsp;
	NSString *oauthHeader = [oauthRequest authorizationString];
&nbsp;
	NSLog(@&quot;OAuth header : %@\n\n&quot;, oauthHeader);
&nbsp;
	ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:url]];
	request.requestMethod = @&quot;POST&quot;;
	request.shouldAttemptPersistentConnection = NO;	
&nbsp;
	[request addRequestHeader:@&quot;X-OAUTH-SP-URL&quot; value:[NSString stringWithFormat:@&quot;https://api.twitter.com/1/account/verify_credentials.%@&quot;, format]]; 
	[request addRequestHeader:@&quot;X-OAUTH-AUTHORIZATION&quot; value:oauth_header];
&nbsp;
	return request;
}</pre></td></tr></table></div>

<br />
<br />
<h4>ポスト</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1950code14'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p195014"><td class="code" id="p1950code14"><pre class="objective-c" style="font-family:monospace;">- (void)uploadToTwitterByTwipl:(NSString *)tweet image:(UIImage *)image {
	self.lastTweet = tweet;
	NSString *url = @&quot;http://api.twipl.net/2/upload.xml&quot;;
	ASIFormDataRequest *request = [self createOAuthEchoRequestForTwipl:url];
&nbsp;
	NSData *imageRepresentation = UIImageJPEGRepresentation(image, 1.0);
	[request setData:imageRepresentation withFileName:@&quot;file&quot; andContentType:@&quot;image/jpg&quot; forKey:@&quot;media1&quot;];
	[request setPostValue:tweet  forKey:@&quot;message&quot;];
	[request setPostValue:twiplApiKey  forKey:@&quot;key&quot;];
&nbsp;
	[request setDelegate:self];
	[request setDidFinishSelector:@selector(twitgooRequestFinished:)];
	[request setDidFailSelector:@selector(requestFailed:)];
&nbsp;
	[request startAsynchronous];
}</pre></td></tr></table></div>

<br />
<br />
いろいろ試してみたところ、画像データにContent-Typeを付加しないと画像データとしてTwiplが判断してくれないみたい。上のやりかたで無事ポストできた。<br />
<h4>レスポンス</h4>
レスポンスはTwitgooのものと同じ。<br />
<br />
<h3>Posterous</h3>
<a href="http://posterous.com/">Posterous &#8211; The place to post everything. Just email us. Dead simple blog by email.</a><br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/9b1805180e5b70908bbd57adb2c5f8ff.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/9b1805180e5b70908bbd57adb2c5f8ff-300x219.png" alt="postreous" title="postreous" width="300" height="219" class="aligncenter size-medium wp-image-1968" /></a><br />
<br />
API Key→不要。<br />
API→<a href="http://posterous.com/api/twitter">Twitter &#8211; Posterous API</a><br />
<br />
<h4>ポスト</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1950code15'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p195015"><td class="code" id="p1950code15"><pre class="objective-c" style="font-family:monospace;">- (void)uploadToTwitterByPosterous:(NSString *)tweet image:(UIImage *)image {
	self.lastTweet = tweet;
	NSString *url = @&quot;http://posterous.com/api2/upload.json&quot;;
	ASIFormDataRequest *request = [self createOAuthEchoRequest:url];
&nbsp;
	NSData *imageRepresentation = UIImageJPEGRepresentation(image, 1.0);
	[request setData:imageRepresentation forKey:@&quot;media&quot;];
	[request setPostValue:tweet  forKey:@&quot;message&quot;];
	[request setPostValue:appName forKey:@&quot;source&quot;];
	[request setPostValue:appURL forKey:@&quot;sourceLink&quot;];	
&nbsp;
	[request setDelegate:self];
	[request setDidFinishSelector:@selector(twitPicRequestFinished:)];
	[request setDidFailSelector:@selector(requestFailed:)];
&nbsp;
	[request startAsynchronous];
}</pre></td></tr></table></div>

<br />
<br />
<h4>レスポンス</h4>
TwitPicのレスポンス処理と同じ。<br />
<a href="http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/">TwitPicのOAuthEcho対応 | iphoneアプリで稼げるのか</a><br />
<h3>Img.ly</h3>
<a href="http://img.ly/">img.ly photo sharing service for twitter</a><br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/f710a1854d586e01f2d778e3f76c9f0e.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/f710a1854d586e01f2d778e3f76c9f0e-300x181.png" alt="img.ly" title="img.ly" width="300" height="181" class="aligncenter size-medium wp-image-1966" /></a><br />
<br />
Img.lyは実はまだ成功してません。ごめんなさい。<br />
API Key→？<br />
API→<a href="http://img.ly/api/docs">img.ly photo sharing service for twitter</a><br />
　　→<a href="http://img.ly/pages/API">img.ly photo sharing service for twitter</a><br />
どっちが正しいのだろう。上のリンクだとAPI Keyは不要っぽいけど、下のリンクだとAPI Keyを使っている。<br />
こんな感じでリクエストを投げてみるもレスポンスが空っぽで何が悪いのか分からなかった。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1950code16'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p195016"><td class="code" id="p1950code16"><pre class="objective-c" style="font-family:monospace;"> (void)uploadToTwitterByImgly:(NSString *)tweet image:(UIImage *)image {
&nbsp;
	self.lastTweet = tweet;
	NSString *url = @&quot;http://img.ly/api/2/upload.json&quot;;
	ASIFormDataRequest *request = [self createOAuthEchoRequest:url];
&nbsp;
	NSData *imageRepresentation = UIImageJPEGRepresentation(image, 1.0);
	[request setData:imageRepresentation forKey:@&quot;media&quot;];
	[request setPostValue:tweet  forKey:@&quot;message&quot;];
&nbsp;
	[request setDelegate:self];
	[request setDidFinishSelector:@selector(twitPicRequestFinished:)];
	[request setDidFailSelector:@selector(requestFailed:)];
&nbsp;
	[request startAsynchronous];
}</pre></td></tr></table></div>

<br />
<br />
後でImg.lyにメールで聞いてみる。<br />
<h3>yFrog</h3>
<a href="http://yfrog.com/">yfrog &#8211; Share your images/videos on Twitter!</a><br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/fbdc7bc53c95b06d5f9daa5ae27fb154.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/fbdc7bc53c95b06d5f9daa5ae27fb154-300x242.png" alt="yfrog" title="yfrog" width="300" height="242" class="aligncenter size-medium wp-image-1967" /></a><br />
<br />
API Keyがもらえないので確認できず。<br />
キー、ください。<br />
<br />
おつかれさまでした。<br />
<br />
次はFacebookへの写真アップロードやるかも。</p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/oauthecho/" title="OAuthEcho" rel="tag nofollow">OAuthEcho</a>, <a href="http://iphone.longearth.net/tag/twitter/" title="twitter" rel="tag nofollow">twitter</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/" title="TwitPicのOAuthEcho対応 (2010 年 8 月 5 日)">TwitPicのOAuthEcho対応</a> </li>
	<li><a href="http://iphone.longearth.net/2010/08/08/tweetphoto%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/" title="TweetPhotoのOAuthEcho対応 (2010 年 8 月 8 日)">TweetPhotoのOAuthEcho対応</a> </li>
	<li><a href="http://iphone.longearth.net/2010/08/04/%e3%81%be%e3%81%a0%e9%96%93%e3%81%ab%e5%90%88%e3%81%86iphone%e3%82%a2%e3%83%97%e3%83%aa%e3%81%aexauth%e5%af%be%e5%bf%9c/" title="まだ間に合うiPhoneアプリのXAuth対応 (2010 年 8 月 4 日)">まだ間に合うiPhoneアプリのXAuth対応</a> </li>
	<li><a href="http://iphone.longearth.net/2009/06/21/%e3%80%90%e3%82%a2%e3%83%97%e3%83%aa%e3%80%91%e3%81%84%e3%81%9f%e3%81%a5%e3%82%89%e7%b3%bb%e3%82%ab%e3%83%a1%e3%83%a9%e3%82%a2%e3%83%97%e3%83%aafakecamera%e9%96%8b%e7%99%ba%e4%b8%ad/" title="【アプリ】いたづら系カメラアプリFakeCamera開発中 (2009 年 6 月 21 日)">【アプリ】いたづら系カメラアプリFakeCamera開発中</a> </li>
	<li><a href="http://iphone.longearth.net/2009/05/24/%e3%80%90nsstring%e3%80%91%e6%96%87%e5%ad%97%e5%88%97%e3%81%8b%e3%82%89%e8%a1%a8%e7%a4%ba%e3%82%b5%e3%82%a4%e3%82%ba%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/" title="【NSString】文字列から表示サイズを取得する方法 (2009 年 5 月 24 日)">【NSString】文字列から表示サイズを取得する方法</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/08/09/oauthecho%e3%81%84%e3%82%8d%e3%81%84%e3%82%8d%e3%81%be%e3%81%a8%e3%82%81/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>TweetPhotoのOAuthEcho対応</title>
		<link>http://iphone.longearth.net/2010/08/08/tweetphoto%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/</link>
		<comments>http://iphone.longearth.net/2010/08/08/tweetphoto%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 00:03:20 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[iphone開発]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[OAuthEcho]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[アプリ]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1929</guid>
		<description><![CDATA[


TwitPicのOAuthEcho対応 &#124; iphoneアプリで稼げるのか

Twitter OAuth対応シリーズ。第三回目はTweetPhotoのOAuthEcho対応です。

前回のTwitPicのOAuth [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/d971603f2c972842c71aebc468e77e99.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/d971603f2c972842c71aebc468e77e99-300x241.png" alt="TweetPhoto" title="TweetPhoto" width="300" height="241" class="aligncenter size-medium wp-image-1953" /></a><br />
<br />
<a href="http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/">TwitPicのOAuthEcho対応 | iphoneアプリで稼げるのか</a><br />
<br />
Twitter OAuth対応シリーズ。第三回目はTweetPhotoのOAuthEcho対応です。<br />
<br />
前回のTwitPicのOAuthEcho対応をベースで話を進めます。<br />
<br />
API Keyはここで取得しておきます。<br />
<a class="link" title="TweetPhoto | Admin Site" href="http://admin.tweetphoto.com/Api.aspx">TweetPhoto | Admin Site</a><br />
<span id="more-1929"></span><br />
<br />
<br />
<h3>API</h3>
<h4>OAuth Echo</h4>
TweetPhotoのOAuth Echoについてはここに書かれています。<br />
<a class="link" title="OAuth Echo - TweetPhoto Developers | Google グループ" href="http://groups.google.com/group/tweetphoto/web/oauth-echo">OAuth Echo &#8211; TweetPhoto Developers | Google グループ</a><br />
<br />
基本はTwitPicの時と同じですが、X-Auth-Service-ProviderにはxmlのURLを指定します。<br />
です。<br />
<ul>
	<li> X-Verify-Credentials-Authorization→OAuthの認証文字列のrealmに&#8221;http://api.twitter.com/&#8221;をセットしたもの</li>
	<li> X-Auth-Service-Provider→&#8221;https://api.twitter.com/1/account/verify_credentials.xml&#8221; 固定</li>
</ul>
<h4>Basic Upload API v2.0</h4>
<a href="http://groups.google.com/group/tweetphoto/web/upload-v2-0-api">Basic Upload API v2.0 (Upload and UploadAndPost) &#8211; TweetPhoto Developers | Google グループ</a><br />
<br />
TweetPhotoではリクエストパラメータではなく、リクエストヘッダに必要なデータをセットするようになってます。リクエストボディにはイメージデータのみ。<br />
<br />
必須のパラメータは<br />
<ul>
	<li>TPAPIKEY→APIキー</li>
	<li>TPMIMETYPE→MIMEタイプ</li>
	<li>Content-Length→画像データサイズ</li>
	<li>Content-Type→&#8221;application/x-www-form-urlencoded&#8221; 固定</li>
</ul>
今回はツイートも合わせてポストしたいので、<br />
<ul>
	<li>TPUTF8→&#8221;True&#8221;</li>
	<li>TPMSG→ついーとをBase64エンコードしたもの</li>
</ul>
も使います。リクエストヘッダにUTF8の文字列は使えないのでBase64エンコードしたものをセットするようになってます。<br />
<br />
その他のAPIはこちらに。<br />
<a href="http://groups.google.com/group/tweetphoto/web">ページ &#8211; TweetPhoto Developers | Google グループ</a><br />
<br />
<h3>ポスト</h3>
OAuthEcho用のリクエストヘッダ組み立てには前回用意したメソッドを使い回します。<br />
<a href="http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/">TwitPicのOAuthEcho対応 | iphoneアプリで稼げるのか</a><br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1929code21'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p192921"><td class="code" id="p1929code21"><pre class="objective-c" style="font-family:monospace;">- (void)uploadToTwitterByTweetPhoto:(NSString *)tweet image:(UIImage *)image {
	self.lastTweet = tweet;
	NSString *url = @&quot;http://tweetphotoapi.com/api/tpapi.svc/upload2&quot;;
	ASIFormDataRequest *request = 	[self createOAuthEchoRequest:url format:@&quot;xml&quot;];
&nbsp;
	NSData *imageRepresentation = UIImageJPEGRepresentation(image, 1.0);
	[request setPostBody:imageRepresentation];
	[request addRequestHeader:@&quot;TPAPIKEY&quot; value:tweetPhotoApiKey];
	[request addRequestHeader:@&quot;TPMIMETYPE&quot; value:@&quot;image/jpeg&quot;];
	[request addRequestHeader:@&quot;Content-Length&quot; value:[NSString stringWithFormat:@&quot;%d&quot;, [imageRepresentation length]]];
	[request addRequestHeader:@&quot;Content-Type&quot; value:@&quot;application/x-www-form-urlencoded&quot;];
	[request addRequestHeader:@&quot;TPUTF8&quot; value:@&quot;true&quot;];	
&nbsp;
	NSString *base64Message = [self base64Encode:tweet];
	[request addRequestHeader:@&quot;TPMSG&quot; value:base64Message];
&nbsp;
	[request setDelegate:self];
	[request setDidFinishSelector:@selector(tweetPhotoRequestFinished:)];
	[request setDidFailSelector:@selector(requestFailed:)];
&nbsp;
	[request startAsynchronous];
}</pre></td></tr></table></div>

<br />
setPostBodyで画像データをセット。<br />
他のパラメータはaddRequestHeaderでリクエストヘッダにセットします。<br />
ついーと文字列はBase64エンコードしたものをセット。<br />
Base64の文字列はこんな感じで組み立ててます。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1929code22'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p192922"><td class="code" id="p1929code22"><pre class="objective-c" style="font-family:monospace;">- (NSString*)base64Encode:(NSString*)text {
	NSString *tmp = [text copy];
	char encodeArray[512];
	memset(encodeArray,'\0', sizeof(encodeArray));	
	NSData *encodeData = [tmp dataUsingEncoding:NSUTF8StringEncoding];
	encode([encodeData length], (char *)[encodeData bytes], sizeof(encodeArray), encodeArray);
	NSString *base64Message = [NSString stringWithCString:encodeArray encoding:NSUTF8StringEncoding];
	[tmp release];
	return base64Message;
}
&nbsp;
static char base64[] = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;
&quot;abcdefghijklmnopqrstuvwxyz&quot;
&quot;0123456789&quot;
&quot;+/&quot;;
&nbsp;
int encode(unsigned s_len, char *src, unsigned d_len, char *dst)
{
	unsigned triad;
&nbsp;
	for (triad = 0; triad &lt; s_len; triad += 3)
	{
		unsigned long int sr;
		unsigned byte;
&nbsp;
		for (byte = 0; (byte&lt;3)&amp;&amp;(triad+byte&lt;s_len); ++byte)
		{
			sr &lt;&lt;= 8;
			sr |= (*(src+triad+byte) &amp; 0xff);
		}
&nbsp;
		sr &lt;&lt;= (6-((8*byte)%6))%6; /*shift left to next 6bit alignment*/
&nbsp;
		if (d_len &lt; 4) return 1; /* error - dest too short */
&nbsp;
		*(dst+0) = *(dst+1) = *(dst+2) = *(dst+3) = '=';
		switch(byte)
		{
			case 3:
				*(dst+3) = base64[sr&amp;0x3f];
				sr &gt;&gt;= 6;
			case 2:
				*(dst+2) = base64[sr&amp;0x3f];
				sr &gt;&gt;= 6;
			case 1:
				*(dst+1) = base64[sr&amp;0x3f];
				sr &gt;&gt;= 6;
				*(dst+0) = base64[sr&amp;0x3f];
		}
		dst += 4; d_len -= 4;
	}
&nbsp;
	return 0;
&nbsp;
}</pre></td></tr></table></div>

<br />
これはTweetPhotoが用意しているObjective-cライブラリを参考にしました。<br />
<a href="http://code.google.com/p/tweetphoto-api-objective-c/source/browse/trunk/TweetPhoto.m?r=7">TweetPhoto.m &#8211; tweetphoto-api-objective-c &#8211; Project Hosting on Google Code</a><br />
<br />
<h3>レスポンス</h3>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1929code23'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p192923"><td class="code" id="p1929code23"><pre class="objective-c" style="font-family:monospace;">- (void)tweetPhotoRequestFinished:(ASIHTTPRequest *)request {
	NSString *responseString = [request responseString];
	NSLog(@&quot;response:%@&quot;,responseString);
&nbsp;
	NSString *url = nil;
	NSRange startRange = [responseString rangeOfString:@&quot;&lt;mediaurl&gt;&quot; options:NSCaseInsensitiveSearch];
	if (startRange.location != NSNotFound) {
		NSRange endRange = [responseString rangeOfString:@&quot;&lt;/mediaurl&gt;&quot; options:NSCaseInsensitiveSearch];
		int location = startRange.location + startRange.length;
		int length = endRange.location - location;
		url = [responseString substringWithRange:NSMakeRange(location, length)];
	}
&nbsp;
	NSLog(@&quot;url:%@&quot;,url);
	if (!url) {
		[self requestFailed:request];
		return;
	}
&nbsp;
	[self.twitterEngine sendUpdate:[NSString stringWithFormat:@&quot;%@ %@&quot;, self.lastTweet, url]];
}
&nbsp;
- (void)requestFailed:(ASIHTTPRequest *)request {
	NSError *error = [request error];
	NSLog(@&quot;Error:%@&quot;,[error localizedDescription]);
}</pre></td></tr></table></div>

<br />
<br />
ポスト時にxmlをフォーマットに指定したのでレスポンスはXMLでかえってきます。<br />
ここではmediaurl要素にポストした画像を見れるURLがあるので、それをぶっこ抜きます。<br />
でもって、それをTwitterへポスト。<br />
これで完了です。<br />
<br />
<h3>おまけ</h3>
古い方のUpload APIでもOAuth Echoが使える。<br />
<a href="http://groups.google.com/group/tweetphoto/web/multipart-form-data-upload">Multipart/Form-data Upload &#8211; TweetPhoto Developers | Google グループ</a><br />
<br />
こっちではTwitPicライクにポストできる。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1929code24'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p192924"><td class="code" id="p1929code24"><pre class="objective-c" style="font-family:monospace;">- (void)uploadToTwitterByTweetPhoto:(NSString *)tweet image:(UIImage *)image {
	self.lastTweet = tweet;
	NSString *url = @&quot;http://tweetphotoapi.com/api/upload.aspx&quot;;
	ASIFormDataRequest *request = 	[self createOAuthEchoRequest:url format:@&quot;xml&quot;];
&nbsp;
	NSData *imageRepresentation = UIImageJPEGRepresentation(image, 1.0);
	[request setData:imageRepresentation forKey:@&quot;media&quot;];
	[request setPostValue:tweet  forKey:@&quot;message&quot;];
	[request setPostValue:tweetPhotoApiKey  forKey:@&quot;api_key&quot;];
&nbsp;
	[request setDelegate:self];
	[request setDidFinishSelector:@selector(tweetPhotoRequestFinished:)];
	[request setDidFailSelector:@selector(requestFailed:)];
&nbsp;
	[request startAsynchronous];
}</pre></td></tr></table></div>

<br />
<br />
<br />
次回は手抜きでその他画像サービスをまとめて書く予定。</p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/api/" title="API" rel="tag nofollow">API</a>, <a href="http://iphone.longearth.net/tag/ar/" title="AR" rel="tag nofollow">AR</a>, <a href="http://iphone.longearth.net/tag/iphone/" title="iphone" rel="tag nofollow">iphone</a>, <a href="http://iphone.longearth.net/tag/oauthecho/" title="OAuthEcho" rel="tag nofollow">OAuthEcho</a>, <a href="http://iphone.longearth.net/tag/photo/" title="photo" rel="tag nofollow">photo</a>, <a href="http://iphone.longearth.net/tag/twitter/" title="twitter" rel="tag nofollow">twitter</a>, <a href="http://iphone.longearth.net/tag/%e3%82%a2%e3%83%97%e3%83%aa/" title="アプリ" rel="tag nofollow">アプリ</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://iphone.longearth.net/2009/06/14/%e3%80%90os3-0%e3%80%91%e3%82%a8%e3%83%aa%e3%82%ab%e6%a7%98%e3%81%ae%e3%82%88%e3%81%86%e3%81%ab%e9%9d%9e%e5%85%ac%e5%bc%8fapi%e3%82%92%e3%83%aa%e3%82%b9%e3%83%88%e3%82%a2%e3%83%83%e3%83%97%e3%81%99/" title="【OS3.0】エリカ様のように非公式APIをリストアップする方法 (2009 年 6 月 14 日)">【OS3.0】エリカ様のように非公式APIをリストアップする方法</a> </li>
	<li><a href="http://iphone.longearth.net/2009/07/06/%e3%80%90iphone%e3%80%91%e3%80%90objective-c%e3%80%91twitter%e3%81%ab%e3%81%a4%e3%81%b6%e3%82%84%e3%81%8d%e3%82%92%e3%83%9d%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b/" title="【iPhone】【Objective-C】Twitterにつぶやきをポストする (2009 年 7 月 6 日)">【iPhone】【Objective-C】Twitterにつぶやきをポストする</a> </li>
	<li><a href="http://iphone.longearth.net/2009/09/01/%e3%80%90iphone%e3%80%91push-notification%e3%81%ae%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95/" title="【iPhone】Push Notificationの実装方法 (2009 年 9 月 1 日)">【iPhone】Push Notificationの実装方法</a> </li>
	<li><a href="http://iphone.longearth.net/2009/12/06/%e3%80%90iphone%e3%80%91coverflow%e3%82%92%e7%b0%a1%e5%8d%98%e3%81%ab%e5%ae%9f%e8%a3%85%e3%81%a7%e3%81%8d%e3%82%8b%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa/" title="【iPhone】coverflowを簡単に実装できるライブラリ (2009 年 12 月 6 日)">【iPhone】coverflowを簡単に実装できるライブラリ</a> </li>
	<li><a href="http://iphone.longearth.net/2009/06/30/%e3%80%90iphone%e3%80%913gs%e3%81%ae%e3%81%93%e3%81%93%e3%81%8c%e3%82%a4%e3%82%a4%ef%bc%81%ef%bc%95%e3%81%a4%e3%83%9d%e3%82%a4%e3%83%b3%e3%83%88%ef%bc%86%e3%82%a2%e3%83%97%e3%83%aa%e3%83%8d%e3%82%bf/" title="【iPhone】3GSのここがイイ！５つのポイント＆アプリネタ (2009 年 6 月 30 日)">【iPhone】3GSのここがイイ！５つのポイント＆アプリネタ</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/08/08/tweetphoto%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>TwitPicのOAuthEcho対応</title>
		<link>http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/</link>
		<comments>http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 23:32:25 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[iphone開発]]></category>
		<category><![CDATA[OAuthEcho]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[XAuth]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1882</guid>
		<description><![CDATA[


まだ間に合うiPhoneアプリのXAuth対応 &#124; iphoneアプリで稼げるのか

前回に続いてTwitterのOAuth関連対応を。
今回はTwitterとの画像共有サービスTwitPicのOAuth対応をしま [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/8f1f3584699f4fd82f66ba688834d543.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/8f1f3584699f4fd82f66ba688834d543-300x238.png" alt="twitpic" title="twitpic" width="300" height="238" class="aligncenter size-medium wp-image-1914" /></a><br />
<br />
<a href="http://iphone.longearth.net/2010/08/04/%e3%81%be%e3%81%a0%e9%96%93%e3%81%ab%e5%90%88%e3%81%86iphone%e3%82%a2%e3%83%97%e3%83%aa%e3%81%aexauth%e5%af%be%e5%bf%9c/">まだ間に合うiPhoneアプリのXAuth対応 | iphoneアプリで稼げるのか</a><br />
<br />
前回に続いてTwitterのOAuth関連対応を。<br />
今回はTwitterとの画像共有サービスTwitPicのOAuth対応をします。<br />
こっちは純粋なOAuthではなくOAuth Echoになりますが、そのあたりは他のサイトを参考にしてください。良記事がたくさんあることでしょう。<br />
<br />
とりわけこちらではOAuth Echoの実装について書きます。<br />
<br />
ベースに前回同様XAuthTwitterEngineを使います。<br />
また、画像ファイルをmulti-partでポストするのを自力実装するのがしんどいので、ASIHttpRequestを使います。<br />
<br />
使い方はTomuteさんの以下の記事が詳しいです。<br />
<a href="http://d.hatena.ne.jp/tomute/20091009/1255153469">ASIHTTPRequestを使って簡単非同期通信 &#8211; Tomute’s Notes</a><br />
<br />
TwitPicへポストするためにAPI keyが必要なので、以下から予め取得してます。<br />
<a href="http://dev.twitpic.com/apps/new">TwitPic Developers &#8211; Register an Application</a><br />
<span id="more-1882"></span><br />
<h3>TwitPicのOAuth Echo API</h3>
<a href="http://dev.twitpic.com/docs/2/upload/">TwitPic Developers &#8211; API Documentation &#8211; API v2 » upload</a><br />
ここに必要な情報が書かれてます。<br />
<br />
リクエストするURLはhttp://api.twitpic.com/2/upload.xmlかhttp://api.twitpic.com/2/upload.json。<br />
受け取りたいレスポンスにより使い分けます。<br />
<br />
HTTPメソッドはPOST。<br />
<br />
リクエストヘッダには以下の２つをセット。<br />
<ul>
	<li> X-Verify-Credentials-Authorization→OAuthの認証文字列のrealmに&#8221;http://api.twitter.com/&#8221;をセットしたもの</li>
	<li> X-Auth-Service-Provider→&#8221;https://api.twitter.com/1/account/verify_credentials.json&#8221;固定</li>
</ul>
リクエストパラメータは以下３つが必須<br />
<ul>
	<li> key→TwitPicから発行されるAPI Key</li>
	<li> message→画像に付与するメッセージ</li>
	<li> media→画像ファイル</li>
</ul>
<br />
<h3>OAuthConsumerの拡張</h3>
XAuthTwitterEngineは中でOAuthConsumerを使っていますが、OAuthConsumerがOAuth認証文字列を組み立てています。具体的にはOAMutableURLRequestクラスです。ですが、認証文字列にアクセスするプロパティやメソッドがないのでカテゴリを使って認証文字列を引っ張り出せるメソッドを追加します。以下の２つのファイルを作成します。<br />
OAMutableURLRequest+Addisions.h<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1882code31'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188231"><td class="code" id="p1882code31"><pre class="objective-c" style="font-family:monospace;">#import &lt;Foundation/Foundation.h&gt;
#import &quot;OAMutableURLRequest.h&quot;
@interface OAMutableURLRequest (DC)
- (NSString*)authorizationString;
@end</pre></td></tr></table></div>

<br />
OAMutableURLRequest+Addisions.m<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1882code32'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188232"><td class="code" id="p1882code32"><pre class="objective-c" style="font-family:monospace;">#import &quot;OAMutableURLRequest+Addisions.h&quot;
@implementation OAMutableURLRequest (DC)
- (NSString*)authorizationString {
	NSString *string = [self valueForHTTPHeaderField:@&quot;Authorization&quot;];
	if (!string) {
		[self prepare];
		string = [self valueForHTTPHeaderField:@&quot;Authorization&quot;];
	}
	return string;
}
@end</pre></td></tr></table></div>

<br />
これで楽ができます。ふふふ。<br />
<h3>リクエストヘッダを組み立てる</h3>
APIの要件に合うようにリクエストを作ります。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1882code33'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188233"><td class="code" id="p1882code33"><pre class="objective-c" style="font-family:monospace;">- (ASIFormDataRequest*)createOAuthEchoRequest:(NSString*)url format:(NSString*)format {
	NSString *authorizeUrl = [NSString stringWithFormat:@&quot;https://api.twitter.com/1/account/verify_credentials.%@&quot;, format];
	OAMutableURLRequest *oauthRequest = [[[OAMutableURLRequest alloc] initWithURL:[NSURL URLWithString:authorizeUrl]
			consumer:self.twitterEngine.consumer
			token:self.twitterEngine.accessToken   
			realm:@&quot;http://api.twitter.com/&quot;
			signatureProvider:nil] autorelease];
&nbsp;
&nbsp;
	NSString *oauthHeader = [oauthRequest authorizationString];
&nbsp;
	NSLog(@&quot;OAuth header : %@\n\n&quot;, oauthHeader);
&nbsp;
	ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:url]];
	request.requestMethod = @&quot;POST&quot;;
	request.shouldAttemptPersistentConnection = NO;	
&nbsp;
	[request addRequestHeader:@&quot;X-Auth-Service-Provider&quot; value:authorizeUrl]; 
	[request addRequestHeader:@&quot;X-Verify-Credentials-Authorization&quot; value:oauthHeader];
&nbsp;
	return request;
}</pre></td></tr></table></div>

<br />
引数にAPI接続URLとformatを渡すとOAuthEcho用のリクエストヘッダを付加したASIFormDataRequestを返すメソッドです。<br />
途中に出てくるOAMutableURLRequestは単にOAuth用認証文字列を生成するためだけに利用させてもらってます。実際にはリクエストはしません。先ほど追加したauthorizationStringメソッドで認証文字列をもらっています。<br />
<br />
<h3>ポストする</h3>
ヘッダさえできてしまえば後は通常のHTTPリクエストと変わりません。必要なパラメータを渡してポストします。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1882code34'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188234"><td class="code" id="p1882code34"><pre class="objective-c" style="font-family:monospace;">- (void)uploadToTwitterByTwitPic:(NSString*)tweet image:(UIImage*)image {
	lastTweet = tweet;
	NSString *url = @&quot;http://api.twitpic.com/2/upload.json&quot;;
	ASIFormDataRequest *request = [self createOAuthEchoRequest:url format:@&quot;json&quot;];
&nbsp;
	NSData *imageRepresentation = UIImageJPEGRepresentation(image, 1.0);
	[request setData:imageRepresentation forKey:@&quot;media&quot;];
	[request setPostValue:tweet  forKey:@&quot;message&quot;];
	[request setPostValue:twitPicApiKey  forKey:@&quot;key&quot;];
&nbsp;
	[request setDelegate:self];
	[request setDidFinishSelector:@selector(twitPicRequestFinished:)];
	[request setDidFailSelector:@selector(requestFailed:)];	
	[request startAsynchronous];
}</pre></td></tr></table></div>

<br />
ASIFormDataRequestのsetDataで画像データをパラメータとしてセットしてます。<br />
setDidFinishSelectorで成功時のデリゲートメソッドを、setDidFailSelectorで失敗時のデリゲートメソッドを指定。最後にstartAsynchronousで非同期通信を開始します。<br />
<br />
<h3>レスポンスの処理</h3>
雑ですがとりあえずこんな感じでTwitPicに投稿されたURLを抜き出して、それを改めてTwitterへポストします。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1882code35'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188235"><td class="code" id="p1882code35"><pre class="objective-c" style="font-family:monospace;">- (NSString *)extractUploadURL:(NSString *)body
        NSString *key = @&quot;url&quot;;
	NSArray					*array = [body componentsSeparatedByString: @&quot;,&quot;];
	if (array.count &lt; 1) return nil;
&nbsp;
	for (NSString *keyValue in array) {
		NSArray *keyValueArray = [keyValue componentsSeparatedByString: @&quot;\&quot;:&quot;];
&nbsp;
		if (keyValueArray.count == 2) {
			NSString				*aKey = [keyValueArray objectAtIndex: 0];
			NSString				*value = [keyValueArray objectAtIndex: 1];
&nbsp;
			aKey = [aKey substringWithRange:NSMakeRange(1, aKey.length - 1)];
			value = [value substringWithRange:NSMakeRange(1, value.length - 2)];		   
			NSLog(@&quot;key:%@, value:%@&quot;,aKey, value);
			if ([aKey isEqualToString:key]) {
				value = [value stringByReplacingOccurrencesOfString:@&quot;\\&quot; withString:@&quot;&quot;];
				value = [value stringByReplacingOccurrencesOfString:@&quot;}&quot; withString:@&quot;&quot;];
				value = [value stringByReplacingOccurrencesOfString:@&quot;\&quot;&quot; withString:@&quot;&quot;];
				return value;
			}
		}
	}
       return nil;
}</pre></td></tr></table></div>

<br />
<br />
<br />
以下はASIHTTPRequestのデリゲートメソッドです。成功時にはXAuthTwitterEngineでTwitterへのポストしてます。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1882code36'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188236"><td class="code" id="p1882code36"><pre class="objective-c" style="font-family:monospace;">- (void)twitPicRequestFinished:(ASIHTTPRequest *)request
{
	NSString *responseString = [request responseString];
	NSLog(@&quot;response:%@&quot;,responseString);
&nbsp;
	NSString *url = [self extractUploadURLFromTwitPicResponse:responseString];
&nbsp;
	NSLog(@&quot;url:%@&quot;,url);
	if (!url) {
		[self requestFailed:request];
		return;
	}
&nbsp;
	[self.twitterEngine sendUpdate:[NSString stringWithFormat:@&quot;%@ %@&quot;, lastTweet, url]];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
	NSError *error = [request error];
	NSLog(@&quot;Error:%@&quot;,[error localizedDescription]);
}</pre></td></tr></table></div>

<br />
twitterEngineのデリゲートでは好きなようにやってください。<br />
おつかれさまでした。<br />
<br />
次回はTweetPhotoのOAuthEcho予定。</p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/oauthecho/" title="OAuthEcho" rel="tag nofollow">OAuthEcho</a>, <a href="http://iphone.longearth.net/tag/twitter/" title="twitter" rel="tag nofollow">twitter</a>, <a href="http://iphone.longearth.net/tag/xauth/" title="XAuth" rel="tag nofollow">XAuth</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://iphone.longearth.net/2010/08/04/%e3%81%be%e3%81%a0%e9%96%93%e3%81%ab%e5%90%88%e3%81%86iphone%e3%82%a2%e3%83%97%e3%83%aa%e3%81%aexauth%e5%af%be%e5%bf%9c/" title="まだ間に合うiPhoneアプリのXAuth対応 (2010 年 8 月 4 日)">まだ間に合うiPhoneアプリのXAuth対応</a> </li>
	<li><a href="http://iphone.longearth.net/2010/08/09/oauthecho%e3%81%84%e3%82%8d%e3%81%84%e3%82%8d%e3%81%be%e3%81%a8%e3%82%81/" title="いろいろまとめてOAuthEcho (2010 年 8 月 9 日)">いろいろまとめてOAuthEcho</a> </li>
	<li><a href="http://iphone.longearth.net/2010/08/08/tweetphoto%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/" title="TweetPhotoのOAuthEcho対応 (2010 年 8 月 8 日)">TweetPhotoのOAuthEcho対応</a> </li>
	<li><a href="http://iphone.longearth.net/2009/06/21/%e3%80%90%e3%82%a2%e3%83%97%e3%83%aa%e3%80%91%e3%81%84%e3%81%9f%e3%81%a5%e3%82%89%e7%b3%bb%e3%82%ab%e3%83%a1%e3%83%a9%e3%82%a2%e3%83%97%e3%83%aafakecamera%e9%96%8b%e7%99%ba%e4%b8%ad/" title="【アプリ】いたづら系カメラアプリFakeCamera開発中 (2009 年 6 月 21 日)">【アプリ】いたづら系カメラアプリFakeCamera開発中</a> </li>
	<li><a href="http://iphone.longearth.net/2009/05/24/%e3%80%90nsstring%e3%80%91%e6%96%87%e5%ad%97%e5%88%97%e3%81%8b%e3%82%89%e8%a1%a8%e7%a4%ba%e3%82%b5%e3%82%a4%e3%82%ba%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/" title="【NSString】文字列から表示サイズを取得する方法 (2009 年 5 月 24 日)">【NSString】文字列から表示サイズを取得する方法</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>まだ間に合うiPhoneアプリのXAuth対応</title>
		<link>http://iphone.longearth.net/2010/08/04/%e3%81%be%e3%81%a0%e9%96%93%e3%81%ab%e5%90%88%e3%81%86iphone%e3%82%a2%e3%83%97%e3%83%aa%e3%81%aexauth%e5%af%be%e5%bf%9c/</link>
		<comments>http://iphone.longearth.net/2010/08/04/%e3%81%be%e3%81%a0%e9%96%93%e3%81%ab%e5%90%88%e3%81%86iphone%e3%82%a2%e3%83%97%e3%83%aa%e3%81%aexauth%e5%af%be%e5%bf%9c/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 23:29:56 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[iphone開発]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[XAuth]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1883</guid>
		<description><![CDATA[


ワールドカップのおかげで8/16まで延長された(実質8月末)Basic認証廃止ですが、そろそろOAuth対応を始めなければならないですね。

Twitterブログ: Twitter APIデベロッパー・コミュニティ [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/17a7f14162fc049452380f6b34594e3e.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/17a7f14162fc049452380f6b34594e3e-300x227.png" alt="くじら" title="くじら" width="300" height="227" class="aligncenter size-medium wp-image-1907" /></a><br />
<br />
ワールドカップのおかげで8/16まで延長された(実質8月末)Basic認証廃止ですが、そろそろOAuth対応を始めなければならないですね。<br />
<br />
<a href="http://blog.twitter.jp/2010/06/twitter-api-oauth.html">Twitterブログ: Twitter APIデベロッパー・コミュニティへのお知らせ (OAuthへの移行に関しての期限延長)</a><br />
<br />
もっとも簡単にXAuthに対応するにはXAuthTwitterEngineを利用する方法でしょう。XAuthに必要な処理な手続きがまとめられているので、簡単に導入できます。ライセンスはMITです。<br />
<a href="http://github.com/aral/XAuthTwitterEngine">aral&#8217;s XAuthTwitterEngine at master &#8211; GitHub</a><br />
<br />
今回はXAuthTwitterEngineを使ってTwitterへポストする所までをまとめます。<br />
<ol>
	<li> XAuth利用申請をTwitterに出す</li>
	<li> XAuthTwitterEngineをプロジェクトに組み込む</li>
	<li> ポストする</li>
</ol>
<span id="more-1883"></span><br />
<h3>XAuth利用申請をTwitterに出す</h3>
TwitterでXAuthを利用するにはTwitterからの承認が必要になります。<br />
（Twitterへのアプリ登録は済んでいる前提。登録はここから<a href="https://twitter.com/apps">Twitter / アプリケーション</a>）<br />
<br />
申請はメールで出します。宛先はapi@twitter.com。<br />
<a href="http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-oauth-access_token-for-xAuth">Twitter API Wiki / Twitter REST API Method: oauth access_token for xAuth</a><br />
<br />
内容はこんな形で送りました。<br />
</p>
<blockquote><p>
Hello.<br />
<br />
I&#8217;m a developer of &#8216;iTaskTimer&#8217;,'iPachi&#8217;,'iSlot Pro&#8217;,'FakeCamera&#8217;, the twitter client application for iPhone.<br />
My account is @daichi1128.<br />
Please apply this app to use xAuth.<br />
<br />
Application: iTaskTimer, iPachi, iSlot Pro, FakeCamera.<br />
<br />
Best regards.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
@daichi1128<br />
http://iphone.longearth.net<br />
</p></blockquote>
<p>
<br />
アプリ名は読み替えてください。これで1,2日後にOKメールがくるのでそうすればXAuth準備はOKです。<br />
ただし、公開前や開発中のアプリで、どのようなアプリケーションか分からない場合、スクリーンショットやアプリサイト、動画を求められることがあるので、予めそうしたものを合わせて送付するのがよいと思います。<br />
<br />
<h3>XAuthTwitterEngineをプロジェクトに組み込む</h3>
XAuthTwitterEngineをダウンロードします。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1883code44'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188344"><td class="code" id="p1883code44"><pre class="shell" style="font-family:monospace;">git clone http://github.com/aral/XAuthTwitterEngine.git</pre></td></tr></table></div>

<br />
中にあるXAuthTwitterEngineDemo.xcodeprojを開いて、左のグループの中から&#8221;Libraries &#038; Headers&#8221;を自分のプロジェクトへドラッグ&#038;ドロップします。<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/3f4cf3f27dad53204e066dccc20fa331.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/3f4cf3f27dad53204e066dccc20fa331-300x245.png" alt="Library&amp;headers" title="Library&amp;headers" width="300" height="245" class="alignnone size-medium wp-image-1892" /></a><br />
<br />
検索ヘッダパスに<br />
$SDKROOT/usr/include/libxml2<br />
を追加。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/e7e9dc05f69bff00e9122a8fc73bbdad.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/e7e9dc05f69bff00e9122a8fc73bbdad-300x273.png" alt="検索ヘッダパス" title="検索ヘッダパス" width="300" height="273" class="alignnone size-medium wp-image-1895" /></a><br />
<br />
lybxml2.dylibをフレームワークに追加<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/516102dea22ed96b89be131043a6625c.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/516102dea22ed96b89be131043a6625c-192x300.png" alt="libxml2dylib" title="libxml2dylib" width="192" height="300" class="alignnone size-medium wp-image-1896" /></a><br />
<br />
ビルドするとYAJL関連のファイルがエラーをはく。使わないので削除する。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/08/7c073a7582af83a12ea7e23f8712cf73.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/08/7c073a7582af83a12ea7e23f8712cf73-300x194.png" alt="YAJL関連" title="YAJL関連" width="300" height="194" class="alignnone size-medium wp-image-1897" /></a><br />
<br />
これでプロジェクトへの組み込みは完了！<br />
<br />
<h3>ポストする</h3>
XAuthTwitterEngineの使い方はデモアプリのソースがそのまま使える感じなので軽く必要な要素だけを上げておきます。<br />
<h4>初期化</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1883code45'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188345"><td class="code" id="p1883code45"><pre class="objective-c" style="font-family:monospace;">	self.twitterEngine = [[XAuthTwitterEngine alloc] initXAuthWithDelegate:self];
	self.twitterEngine.consumerKey = kOAuthConsumerKey;
	self.twitterEngine.consumerSecret = kOAuthConsumerSecret;</pre></td></tr></table></div>

<br />
TwitterからもらったConsumerKeyとConsumerSecretをXAuthTwitterEngineへセットします。<br />
<br />
<h4>認証チェック</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1883code46'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188346"><td class="code" id="p1883code46"><pre class="objective-c" style="font-family:monospace;">	if ([self.twitterEngine isAuthorized])
	{
		UIAlertViewQuick(@&quot;Cached xAuth token found!&quot;, @&quot;This app was previously authorized for a Twitter account so you can press the second button to send a tweet now.&quot;, @&quot;OK&quot;);
		self.sendTweetButton.enabled = YES;
	}</pre></td></tr></table></div>

<br />
<br />
isAuthorizedで認証済みかどうかチェックします。ただし、内部ではデリゲートのcachedTwitterXAuthAccessTokenStringForUsernameメソッドを呼びトークンがあるかをチェックしているので、このメソッドを実装します。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1883code47'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188347"><td class="code" id="p1883code47"><pre class="objective-c" style="font-family:monospace;">- (NSString *) cachedTwitterXAuthAccessTokenStringForUsername: (NSString *)username;
{
	NSString *accessTokenString = [[NSUserDefaults standardUserDefaults] objectForKey:kCachedXAuthAccessTokenStringKey];	
	NSLog(@&quot;About to return access token string: %@&quot;, accessTokenString);	
	return accessTokenString;
}</pre></td></tr></table></div>

<br />
これでkCachedXAuthAccessTokenStringKeyをキーとしてNSUserDefaultの値が保存されていればそれを返すようになりました。あとはトークンを取得するタイミングでNSUserDefaultへ保存すればキャッシュがきくようになりますね。<br />
<br />
<h4>トークン取得</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1883code48'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188348"><td class="code" id="p1883code48"><pre class="objective-c" style="font-family:monospace;">	NSString *username = @&quot;daichi1128&quot;;
	NSString *password = @&quot;chomechome&quot;
	[self.twitterEngine exchangeAccessTokenForUsername:username password:password];</pre></td></tr></table></div>

<br />
これだけで勝手に非同期にアクセストークンを取得しに行ってくれます。トークン取得が成功するとstoreCachedTwitterXAuthAccessTokenStringが、失敗するとtwitterXAuthConnectionDidFailWithErrorが呼ばれるので実装します。<br />
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1883code49'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188349"><td class="code" id="p1883code49"><pre class="objective-c" style="font-family:monospace;">- (void) storeCachedTwitterXAuthAccessTokenString: (NSString *)tokenString forUsername:(NSString *)username
{
	[[NSUserDefaults standardUserDefaults] setObject:tokenString forKey:kCachedXAuthAccessTokenStringKey];
}
- (void) twitterXAuthConnectionDidFailWithError: (NSError *)error;
{
	NSLog(@&quot;Error: %@&quot;, error);
}</pre></td></tr></table></div>

<br />
成功時にNSUserDefaultに値を保存しています。これで二度目以降はisAuthorize時にキャッシュが有効になります。<br />
<h4>ポスト</h4>
<br />

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1883code50'); return false;">View Code</a> OBJECTIVE-C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p188350"><td class="code" id="p1883code50"><pre class="objective-c" style="font-family:monospace;">        NSString *tweetText = @&quot;ちょめちょめ&quot;;
	[self.twitterEngine sendUpdate:tweetText];</pre></td></tr></table></div>

<br />
これだけでポスト完了です！素晴らしい！<br />
ポスト成功時はrequestSucceededが、失敗時はrequestFailedがコールされるのでやりたいようにやっちゃってください。<br />
<br />
XAuthTwitterEngineの使い方は以上。<br />
<br />
次回はみなさんの大好きなTwitPicへのOAuthEcho対応書きます。<br />
<br />
</p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/twitter/" title="twitter" rel="tag nofollow">twitter</a>, <a href="http://iphone.longearth.net/tag/xauth/" title="XAuth" rel="tag nofollow">XAuth</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://iphone.longearth.net/2010/08/05/twitpic%e3%81%aeoauthecho%e5%af%be%e5%bf%9c/" title="TwitPicのOAuthEcho対応 (2010 年 8 月 5 日)">TwitPicのOAuthEcho対応</a> </li>
	<li><a href="http://iphone.longearth.net/2010/08/09/oauthecho%e3%81%84%e3%82%8d%e3%81%84%e3%82%8d%e3%81%be%e3%81%a8%e3%82%81/" title="いろいろまとめてOAuthEcho (2010 年 8 月 9 日)">いろいろまとめてOAuthEcho</a> </li>
	<li><a href="http://iphone.longearth.net/2009/06/21/%e3%80%90%e3%82%a2%e3%83%97%e3%83%aa%e3%80%91%e3%81%84%e3%81%9f%e3%81%a5%e3%82%89%e7%b3%bb%e3%82%ab%e3%83%a1%e3%83%a9%e3%82%a2%e3%83%97%e3%83%aafakecamera%e9%96%8b%e7%99%ba%e4%b8%ad/" title="【アプリ】いたづら系カメラアプリFakeCamera開発中 (2009 年 6 月 21 日)">【アプリ】いたづら系カメラアプリFakeCamera開発中</a> </li>
	<li><a href="http://iphone.longearth.net/2009/05/24/%e3%80%90nsstring%e3%80%91%e6%96%87%e5%ad%97%e5%88%97%e3%81%8b%e3%82%89%e8%a1%a8%e7%a4%ba%e3%82%b5%e3%82%a4%e3%82%ba%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/" title="【NSString】文字列から表示サイズを取得する方法 (2009 年 5 月 24 日)">【NSString】文字列から表示サイズを取得する方法</a> </li>
	<li><a href="http://iphone.longearth.net/2009/06/21/%e3%80%90iphone%e3%80%91%e5%85%ac%e9%96%8b%e5%89%8d%e3%81%ab%e3%82%a2%e3%83%97%e3%83%aa%e3%83%8d%e3%82%bf%e3%82%92%e6%99%92%e3%81%99%e3%81%93%e3%81%a8%e3%81%ae%e6%84%8f%e7%be%a9/" title="【iPhone】公開前にアプリネタを晒すことの意義 (2009 年 6 月 21 日)">【iPhone】公開前にアプリネタを晒すことの意義</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/08/04/%e3%81%be%e3%81%a0%e9%96%93%e3%81%ab%e5%90%88%e3%81%86iphone%e3%82%a2%e3%83%97%e3%83%aa%e3%81%aexauth%e5%af%be%e5%bf%9c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>デザインができないエンジニアのためのPhotoshop入門</title>
		<link>http://iphone.longearth.net/2010/07/02/%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%8b%e3%82%a2%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aephotoshop%e5%85%a5%e9%96%80/</link>
		<comments>http://iphone.longearth.net/2010/07/02/%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%8b%e3%82%a2%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aephotoshop%e5%85%a5%e9%96%80/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 15:18:36 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[開発補助]]></category>
		<category><![CDATA[デザイン]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1806</guid>
		<description><![CDATA[
お久しぶりです。
長いこと更新をさぼってしまいました。
気負わずゆるく更新していこうと思います。

さて。今回は他でもありません。
デザインど素人な僕がついにフォトショップに手を出すことにしました。

というのも、稚拙 [...]]]></description>
			<content:encoded><![CDATA[<p>
お久しぶりです。<br />
長いこと更新をさぼってしまいました。<br />
気負わずゆるく更新していこうと思います。<br />
<br />
さて。今回は他でもありません。<br />
デザインど素人な僕がついにフォトショップに手を出すことにしました。<br />
<span id="more-1806"></span><br />
というのも、稚拙アプリiSlot ProでOS3.2以降、左の画像のように小数点ありキーボードが出るべきところで、右の画像のように小数点が表示されず、整数しか打ち込めない不具合が発覚。<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/01b8aad6f315d2478deb8df3a4453743.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/01b8aad6f315d2478deb8df3a4453743-161x300.png" alt="小数点ありキーボード" title="小数点ありキーボード" width="161" height="300" class="alignnone size-medium wp-image-1809" /></a><a href="http://iphone.longearth.net/wp-content/uploads/2010/07/4f40bf9058e02c735b54b67fa001c1e1.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/4f40bf9058e02c735b54b67fa001c1e1-161x300.png" alt="数字キーボード" title="数字キーボード" width="161" height="300" class="alignnone size-medium wp-image-1811" /></a><br />
左のキーボードのように小数点ありキーボードが出るべきところで、右のように小数点が表示されず、整数しか打ち込めない不具合が発覚。<br />
<br />
というのも、これまではUITextFieldが持つUIKeyboardクラスを引っ張り出し、そのビューに小数点ボタンを置くことで小数点キーボードを作っていたのですが、OS3.2からUIKeyboardなんてクラスはなくなってしまったようで、貼付けることができなくなってしまいました。あえてクラス名は書きませんがUIKeyboardの代わりに用意されたクラスに小数点ボタンを貼付けようとしたところ、これがうまくいかず。<br />
OS3.2からキーボードをカスタマイズできるようになったことがきっかけのようです。<br />
undocumentedなAPIを使っていたことが悪いので何も文句は言えません。素直に用意されたものを使えということですね。<br />
<br />
なので、UITextFieldクラスのinputViewメソッドを実装することでカスタムキーボードを表示する方針で修正することに。<br />
<br />
ですが、そのキーボード画像はどこにあるの？<br />
え？自分で作るの？<br />
<br />
という流れでキーボード画像を作ることになったわけなのです。<br />
せっかくなので、フォトショップを買おうと、いやCS5を買おうと。そういうわけなのです。<br />
<br />
<a href="http://iphone.longearth.net/2009/05/10/%e3%80%90%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%80%91iphone%e3%82%a2%e3%83%97%e3%83%aa%e7%94%a8%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e3%82%92%e5%a4%96%e6%b3%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/">【デザイン】iPhoneアプリ用アイコンを外注してみた | iphoneアプリで稼げるのか</a><br />
<a href="http://iphone.longearth.net/2009/05/21/%e3%82%bf%e3%83%96%e3%83%90%e3%83%bc%e3%81%a8%e3%81%8b%e3%83%84%e3%83%bc%e3%83%ab%e3%83%90%e3%83%bc%e7%94%a8%e3%81%ae%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e8%b2%b7%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/">タブバーとかツールバー用のアイコン買ってみた | iphoneアプリで稼げるのか</a><br />
<br />
これまでデザインができないことをカバーしようといろいろ試してきた僕ですが、いい加減手を出しますよ。どうなっても知りませんよ。僕のアプリが。<br />
<br />
しかし、結構大きな問題があるのですが、僕はデザインのセンスなんてかけらもないのです。フォトショップも使ったことがないのです。<br />
<br />
そんなデザインど素人な僕ですが、なんとかキーボードを作ることができたので、その再現手順を紹介しようと思います。<br />
ようは、既にある画像をマネする、複製する方法です。<br />
はじめから独創性豊かなデザインなんてできるわけもないので、まずは手堅くマネからいかせてください。<br />
<br />
今回使うフォトショップはCS5 Extended体験版です。<br />
<br />
<h3>マネをする準備</h3>
まずはフォトショップを起動して、マネをする画像を開く。画像のRGBやピクセル数を把握するため。念のためだが、画像の開き方は「メニュー→ファイル→開く」だ。<br />
キーボード画像を開いてみた。<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/6a298079ce22621d2baaf381b24533b7.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/6a298079ce22621d2baaf381b24533b7-174x300.png" alt="マネする画像" title="マネする画像" width="174" height="300" class="alignnone size-medium wp-image-1823" /></a><br />
<br />
次にピクセル、色情報を確認するために「情報」タブを表示する。<br />
メニュー→ウィンドウ→情報<br />
と進むと情報タブが表示されるので、それをグイッと右にドラッグして、レイヤータブなどがあるところに置いておこう。<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/072bc9117218bf6daa2a57001f4295d9.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/072bc9117218bf6daa2a57001f4295d9-98x300.png" alt="情報タブ" title="情報タブ" width="98" height="300" class="alignnone size-medium wp-image-1825" /></a><br />
<br />
これで複製する準備は整った。<br />
<h3>ファイルを作成する</h3>
まずはキーボードのサイズを測ろう。新しくpsdファイルを作成する時に幅、高さを指定する必要があるからだ。<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/e947ce2a4575ac23942c72596f0aeb70.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/e947ce2a4575ac23942c72596f0aeb70-174x300.png" alt="500%" title="500%" width="174" height="300" class="alignnone size-medium wp-image-1828" /></a><br />
<br />
マネする画像ウィンドウの左下に表示倍率を指定する所があるので、これを500%など、ピクセルレベルで確認できる大きさまで拡大しよう。<br />
<br />
その後は左側にあるツールバーから長方形選択ツールを選ぶ。ツールバーのアイコンを右クリックすると長方形選択ツールが選べる。<br />
(下の画像は何とも見にくいが、クリックして拡大してほしい)<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/f421f49de80c975fe73d7a0d32c5a644.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/f421f49de80c975fe73d7a0d32c5a644-10x300.png" alt="ツールバー" title="ツールバー" width="10" height="300" class="alignnone size-medium wp-image-1830" /></a><br />
次は慎重にピクセル単位でキーボードの左上にカーソルを合わせて、左クリック。そのままドラッグして、キーボード全体を選択する。<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/15326809e458478994ffd67322d95a03.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/15326809e458478994ffd67322d95a03-174x300.png" alt="選択" title="選択" width="174" height="300" class="alignnone size-medium wp-image-1832" /></a><a href="http://iphone.longearth.net/wp-content/uploads/2010/07/c2494d3a016872c2e2d00f8ffb76de3f.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/c2494d3a016872c2e2d00f8ffb76de3f-98x300.png" alt="選択時の情報タブ" title="選択時の情報タブ" width="98" height="300" class="alignnone size-medium wp-image-1833" /></a><br />
<br />
この時、情報タブのW、Hの数値をチェック。Wはwidth、Hはheight。このサイズにあ合わせて新しいファイルを作成するのだ。今回は216&#215;320だった。<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/221d21e9294316ae6252a2f1e870290e.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/221d21e9294316ae6252a2f1e870290e-188x300.png" alt="キーボード選択" title="キーボード選択" width="188" height="300" class="alignnone size-medium wp-image-1835" /></a><a href="http://iphone.longearth.net/wp-content/uploads/2010/07/453e94508a88a0c6dbe20cc9a6fde6e7.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/453e94508a88a0c6dbe20cc9a6fde6e7-98x300.png" alt="選択完了時の情報" title="選択完了時の情報" width="98" height="300" class="alignnone size-medium wp-image-1836" /></a><br />
<br />
Retinaディスプレイ用にするなら、幅、高さをそれぞれ倍でファイルを作成しよう。<br />
<br />
メニュー→ファイル→新規で<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/5e8cfd77059e84eceaeef93fcc00c3fb.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/5e8cfd77059e84eceaeef93fcc00c3fb-300x165.png" alt="新規" title="新規" width="300" height="165" class="alignnone size-medium wp-image-1842" /></a><br />
432&#215;640としてファイルを作成。背景は透明がいい。<br />
<br />
見やすいようにファイルを左右に並べておこう。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/f9431b207c1441aa3ed31ce6cfeb046b.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/f9431b207c1441aa3ed31ce6cfeb046b-300x258.png" alt="左右に並べる" title="左右に並べる" width="300" height="258" class="alignnone size-medium wp-image-1840" /></a><br />
上の画像の所を選択してほしい。<br />
<br />
<h3>ボーダーを描く</h3>
いよいよ書いていこう。元画像の上から順に描いていこう。その方が分かりやすい。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/3a5ab0f5caff6f4f10e8e6dc5a8d8029.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/3a5ab0f5caff6f4f10e8e6dc5a8d8029-229x300.png" alt="上のボーダー" title="上のボーダー" width="229" height="300" class="alignnone size-medium wp-image-1844" /></a><br />
拡大してみるとキーボードの上には黒い線がある。さきほどと同じ要領で選択して、サイズを測ろう。1pxのようだ。幅は画面一杯なので、320pxだ。Retina用では2倍にするので、新ファイルには2pxで線を描こう。<br />
<br />
次に色を調べよう。色を調べるにはスポイトツールを使う。左メニューの上から６番目のアイコンを右クリック→スポイトツール<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/8f84f43c56f283e25102fd088c5243a2.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/8f84f43c56f283e25102fd088c5243a2.png" alt="スポイトツール" title="スポイトツール" width="37" height="163" class="alignnone size-full wp-image-1845" /></a><br />
<br />
元画像の方でクリックしながらマウスを動かすと色のついた円が表示されるはずだ。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/fe27c61db6117218cba3bacd7ced533e.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/fe27c61db6117218cba3bacd7ced533e-226x300.png" alt="スポイトする" title="スポイトする" width="226" height="300" class="alignnone size-medium wp-image-1847" /></a><br />
<br />
動かしてみると上側の色が変わるのが分かる。それが今カーソルが指しているポイントの色だ。円の色に合わせて右上のカラータブの色も変わっている。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/1997a73840a6beb82dd73327fe3e1e53.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/1997a73840a6beb82dd73327fe3e1e53-300x141.png" alt="カラー" title="カラー" width="300" height="141" class="alignnone size-medium wp-image-1848" /></a><br />
<br />
黒い線の上でマウスを止めて、カラータブの情報を見てみよう。R:0, G:0, B:0で真っ黒だ。お目当ての色のところでクリックを離すと、それがそのまま描画色となる。単色の場合は使い勝手がよい。<br />
<br />
ということで、640&#215;2のサイズを黒で塗りつぶそう。<br />
<br />
その前にレイヤーに名前をつけておく。ここではborderとした。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/5dbee3c1de9cb3d707792f8e3e282a8b.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/5dbee3c1de9cb3d707792f8e3e282a8b-300x265.png" alt="ボーダー" title="ボーダー" width="300" height="265" class="alignnone size-medium wp-image-1851" /></a><br />
<br />
borderレイヤー上で情報タブのX、Y、W、Hを見ながら慎重に選択する。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/fb54e763434156c89e5a13182061134c.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/fb54e763434156c89e5a13182061134c-229x300.png" alt="ボーダー選択" title="ボーダー選択" width="229" height="300" class="alignnone size-medium wp-image-1852" /></a><br />
<br />
次に左のツールバーから塗りつぶしツールを選ぼう。バケツのマークだ。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/a2ad3924f59ae277491e73dd48f0b07b.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/a2ad3924f59ae277491e73dd48f0b07b-34x300.png" alt="塗りつぶしツール" title="塗りつぶしツール" width="34" height="300" class="alignnone size-medium wp-image-1853" /></a><br />
<br />
選択範囲上でクリック。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/69383c1b7210beec8c4fe10101b40c5f.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/69383c1b7210beec8c4fe10101b40c5f-229x300.png" alt="黒塗り" title="黒塗り" width="229" height="300" class="alignnone size-medium wp-image-1855" /></a><br />
<br />
間違えた場合は、あわてず<br />
メニュー→編集→一段階戻る<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/725bcc9124f4f3f814f2c883a34ac502.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/725bcc9124f4f3f814f2c883a34ac502-300x146.png" alt="一段階戻る" title="一段階戻る" width="300" height="146" class="alignnone size-medium wp-image-1856" /></a><br />
<br />
この要領で、他のボーダーも描くとこんな感じに。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/8185ae7d4bf460afec64b91e481d7a6d.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/8185ae7d4bf460afec64b91e481d7a6d-300x220.png" alt="ボーダーのみ" title="ボーダーのみ" width="300" height="220" class="alignnone size-medium wp-image-1858" /></a><br />
<br />
<h3>ボタンを描く</h3>
次に、ボタンを描こう。<br />
まずはボタン用のレイヤーを作る。ここではbackgroundとしよう。<br />
ボーダーと違い、ボタンはグラデーションがかかっているので少し手順が変わるが基本は同じだ。ボタンの幅、高さを調べ、グラデーションの開始色、終了色を調べよう。<br />
ツールバーのバケツマークを右クリックし、グラデーションツールを選ぶ。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/5c7fda0749bbd0845070aefc916bb2ab.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/5c7fda0749bbd0845070aefc916bb2ab-37x300.png" alt="グラデーションツール" title="グラデーションツール" width="37" height="300" class="alignnone size-medium wp-image-1860" /></a><br />
<br />
backgroundレイヤーが選択されていることを確認して、選択範囲を上から下へShiftを押しながらドラッグ。Shiftを押すことでガイドラインが真っすぐになる。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/07897ce0b5f577d2881843a6be563791.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/07897ce0b5f577d2881843a6be563791-234x300.png" alt="グラデドラッグ" title="グラデドラッグ" width="234" height="300" class="alignnone size-medium wp-image-1862" /></a><br />
<br />
上から下まできっちりドラッグできたらクリックを離そう。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/eb370c228d0b74f0c91a05c624fe62b3.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/eb370c228d0b74f0c91a05c624fe62b3-234x300.png" alt="グラデ塗り" title="グラデ塗り" width="234" height="300" class="alignnone size-medium wp-image-1863" /></a><br />
<br />
この要領で、各ボタンを塗っていくとこんな感じに。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/92f30bb9abbd34d193d1166d1b708b4b.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/92f30bb9abbd34d193d1166d1b708b4b-300x225.png" alt="背景" title="背景" width="300" height="225" class="alignnone size-medium wp-image-1866" /></a><br />
<br />
もう完全にキーボードやないか！<br />
<br />
<h3>数字を描く</h3>
次は数字だ。<br />
左メニューからテキストツールを選ぶ。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/d3e99e1bea88484c7b937946ad368771.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/d3e99e1bea88484c7b937946ad368771-27x300.png" alt="テキストツール" title="テキストツール" width="27" height="300" class="alignnone size-medium wp-image-1869" /></a><br />
<br />
テキストツールを選んだ状態で、下画像一番右のよくわからないアイコンをクリックするとフォントやフォントサイズを指定できるウィンドウが出る。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/f91bb0456af7cb9843793310a800cd57.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/f91bb0456af7cb9843793310a800cd57-300x101.png" alt="フォント" title="フォント" width="300" height="101" class="alignnone size-medium wp-image-1870" /></a><br />
<br />
調べてみるとiPhone数字フォントはHelveticaのようなので、これを選択。<br />
フォントサイズを元画像から調べるいい方法が見つからなかった。目視で元画像と比較して60ptのBoldに落ち着いた。いい方法があれば教えてくださいm(_ _)m<br />
<br />
という要領で、数字をのせるとこんな感じに。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/850d52c716c8df8897186356e4863b89.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/850d52c716c8df8897186356e4863b89-300x217.png" alt="けっこうできてきた" title="けっこうできてきた" width="300" height="217" class="alignnone size-medium wp-image-1868" /></a><br />
<br />
上の画像はなんとなく、数字にドロップシャドウをつけている。<br />
テキストレイヤーを選択し、右クリック→レイヤー効果<br />
として、左メニューのドロップシャドウにチェック。<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/fede197d2770ad7d5667bb8607f67250.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/fede197d2770ad7d5667bb8607f67250-300x213.png" alt="レイヤースタイル" title="レイヤースタイル" width="300" height="213" class="alignnone size-medium wp-image-1872" /></a><br />
角度を90度として、真下に、距離、サイズを2pxにしてみた。<br />
<br />
楕円ツールで、小数点マークを描き、ドロップシャドウ。<br />
多角形選択ツールで矢印状に選択範囲を作り、塗りつぶし、ドロップシャドウ。<br />
中に「x」文字を描き、ドロップシャドウ。<br />
<br />
で、完成！<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/07/ba3fe19d5f262e860f2158a7c82d3fd3.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/07/ba3fe19d5f262e860f2158a7c82d3fd3-300x220.png" alt="完成" title="完成" width="300" height="220" class="alignnone size-medium wp-image-1875" /></a><br />
<br />
終盤は大人の事情でだいぶ駆け足になってしまいましたが、どうでしょう。<br />
全てをご覧になったみなさんはお分かりの通り、一切デザイン的要素を交えず、機械的に操作をしていくだけでそれなりの画像ができてしまいます！<br />
デザインに苦手意識を持っていた人には朗報ではないでしょうか。<br />
ただ、フォトショップの使い方を覚えるだけです。<br />
<br />
幸い、参考になるサイトやアプリはたくさんあります。<br />
<a href="http://d.hatena.ne.jp/tanemori/20100701/iPhoneAppsAndWebDesign">iPhone アプリと Web デザイン Part.5 &#8211; soundscape out</a><br />
複製ができてしまえば、こういったカッコイイアプリ達を参考に、いい感じのものが作れそうです。<br />
<br />
もちろん、ゼロからプロのデザイナーさんが作るようなものは作れないです。作れたら逆にスゴいです。<br />
でも、そういうものはデザイナーさんに任せればよいと思います。<br />
我々の本職はエンジニアなのですから。<br />
ただ、たしなみ程度にフォトショップを使えれば、自分である程度のリソースを調達できるようになって小回りがきくようになるのでいいですよね。という話です。<br />
<br />
センスなど全くなくても作れるので是非お試しを。<br />
ただ、できあがると気持ちいいのですが、細かい作業で正直しんどかったです。<br />
</p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3/" title="デザイン" rel="tag nofollow">デザイン</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://iphone.longearth.net/2009/05/21/%e3%82%bf%e3%83%96%e3%83%90%e3%83%bc%e3%81%a8%e3%81%8b%e3%83%84%e3%83%bc%e3%83%ab%e3%83%90%e3%83%bc%e7%94%a8%e3%81%ae%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e8%b2%b7%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/" title="タブバーとかツールバー用のアイコン買ってみた (2009 年 5 月 21 日)">タブバーとかツールバー用のアイコン買ってみた</a> </li>
	<li><a href="http://iphone.longearth.net/2009/05/21/%e3%80%90%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%80%91lancers%e3%81%a7%e4%be%9d%e9%a0%bc%e3%81%97%e3%81%9f%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e7%b4%8d%e5%93%81%e3%81%97%e3%81%a6%e3%82%82%e3%82%89/" title="【デザイン】Lancersで依頼したアイコン納品してもらった (2009 年 5 月 21 日)">【デザイン】Lancersで依頼したアイコン納品してもらった</a> </li>
	<li><a href="http://iphone.longearth.net/2009/05/10/%e3%80%90%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%80%91iphone%e3%82%a2%e3%83%97%e3%83%aa%e7%94%a8%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e3%82%92%e5%a4%96%e6%b3%a8%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/" title="【デザイン】iPhoneアプリ用アイコンを外注してみた (2009 年 5 月 10 日)">【デザイン】iPhoneアプリ用アイコンを外注してみた</a> </li>
	<li><a href="http://iphone.longearth.net/2009/01/20/%e3%80%90uitableview%e3%80%91uitableview%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e8%a9%b3%e7%b4%b0%e7%94%bb%e9%9d%a2%e3%82%92%e4%bd%9c%e3%82%8b-1%e3%80%90uitableviewdatasource%e3%80%91/" title="【UITableView】UITableViewを使って詳細画面を作る-1【UITableViewDataSource】 (2009 年 1 月 20 日)">【UITableView】UITableViewを使って詳細画面を作る-1【UITableViewDataSource】</a> </li>
	<li><a href="http://iphone.longearth.net/2009/10/11/%e3%80%90itasktimer%e3%80%91%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%82%92%e3%82%af%e3%83%bc%e3%83%ab%e3%81%ab%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b31-2%e6%8f%90%e5%87%ba/" title="【iTaskTimer】デザインをクールにバージョン1.2提出 (2009 年 10 月 11 日)">【iTaskTimer】デザインをクールにバージョン1.2提出</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/07/02/%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%8b%e3%82%a2%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aephotoshop%e5%85%a5%e9%96%80/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>01/25〜01/31のAppダウンロード数</title>
		<link>http://iphone.longearth.net/2010/02/01/0125%e3%80%9c0131%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/</link>
		<comments>http://iphone.longearth.net/2010/02/01/0125%e3%80%9c0131%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 13:26:47 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[ダウンロード]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[売上]]></category>
		<category><![CDATA[週次]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/2010/02/01/0125%e3%80%9c0131%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/</guid>
		<description><![CDATA[
2010/01/25〜2010/01/31の週次Appダウンロードレポート。

	タグ: App Store, iphone, ダウンロード, 売上, 週次

	関連する投稿
	
	11/09〜11/15のAppダウン [...]]]></description>
			<content:encoded><![CDATA[<p>
2010/01/25〜2010/01/31の週次Appダウンロードレポート。<br /><br /><span id="more-1795"></span><script type="text/javascript" charset="utf-8" src="http://www.jschart.jp/t/?gt=2&#038;gd[FakeCamera]=1055&#038;gd[iPachinko]=529&#038;gd[iTaskTimer Lite]=146&#038;w=500&#038;h=300&#038;xl=%E7%84%A1%E6%96%99%E3%82%A2%E3%83%97%E3%83%AA"></script><br/><script type="text/javascript" charset="utf-8" src="http://www.jschart.jp/t/?gt=2&#038;gd[iSlot Pro]=92&#038;gd[iTask Timer]=40&#038;w=500&#038;h=300&#038;xl=%E6%9C%89%E6%96%99%E3%82%A2%E3%83%97%E3%83%AA"></script></p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/app-store/" title="App Store" rel="tag nofollow">App Store</a>, <a href="http://iphone.longearth.net/tag/iphone/" title="iphone" rel="tag nofollow">iphone</a>, <a href="http://iphone.longearth.net/tag/%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89/" title="ダウンロード" rel="tag nofollow">ダウンロード</a>, <a href="http://iphone.longearth.net/tag/%e5%a3%b2%e4%b8%8a/" title="売上" rel="tag nofollow">売上</a>, <a href="http://iphone.longearth.net/tag/%e9%80%b1%e6%ac%a1/" title="週次" rel="tag nofollow">週次</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://iphone.longearth.net/2009/11/17/1109%e3%80%9c1115%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/" title="11/09〜11/15のAppダウンロード数 (2009 年 11 月 17 日)">11/09〜11/15のAppダウンロード数</a> </li>
	<li><a href="http://iphone.longearth.net/2009/11/10/1102%e3%80%9c1108%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/" title="11/02〜11/08のAppダウンロード数 (2009 年 11 月 10 日)">11/02〜11/08のAppダウンロード数</a> </li>
	<li><a href="http://iphone.longearth.net/2009/11/03/1026%e3%80%9c1101%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/" title="10/26〜11/01のAppダウンロード数 (2009 年 11 月 3 日)">10/26〜11/01のAppダウンロード数</a> </li>
	<li><a href="http://iphone.longearth.net/2009/10/27/1019%e3%80%9c1025%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/" title="10/19〜10/25のAppダウンロード数 (2009 年 10 月 27 日)">10/19〜10/25のAppダウンロード数</a> </li>
	<li><a href="http://iphone.longearth.net/2009/10/11/0921%e3%80%9c0927%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/" title="09/21〜09/27のAppダウンロード数 (2009 年 10 月 11 日)">09/21〜09/27のAppダウンロード数</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/02/01/0125%e3%80%9c0131%e3%81%aeapp%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%95%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhoneアプリ１年間の売上報告</title>
		<link>http://iphone.longearth.net/2010/02/01/iphone%e3%82%a2%e3%83%97%e3%83%aa%ef%bc%91%e5%b9%b4%e9%96%93%e3%81%ae%e5%a3%b2%e4%b8%8a%e5%a0%b1%e5%91%8a/</link>
		<comments>http://iphone.longearth.net/2010/02/01/iphone%e3%82%a2%e3%83%97%e3%83%aa%ef%bc%91%e5%b9%b4%e9%96%93%e3%81%ae%e5%a3%b2%e4%b8%8a%e5%a0%b1%e5%91%8a/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 00:00:37 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[ダウンロード]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1727</guid>
		<description><![CDATA[


気づけばこのブログを書き始めて１年経ってました。

ブログタイトルの通り、iphoneアプリでどんだけ稼げるのかを検証するのがこのブログの目的であり、使命であります。

今回はこれまでにリリースしたアプリ達のダウン [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://iphone.longearth.net/wp-content/uploads/2010/01/iphone_development_nomovie.0031.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/01/iphone_development_nomovie.0031-300x225.png" alt="作ったアプリ達" title="作ったアプリ達" width="300" height="225" class="alignnone size-medium wp-image-1735" /></a><br />
<br />
気づけばこのブログを書き始めて１年経ってました。<br />
<br />
ブログタイトルの通り、iphoneアプリでどんだけ稼げるのかを検証するのがこのブログの目的であり、使命であります。<br />
<br />
今回はこれまでにリリースしたアプリ達のダウンロード数と売上を惜しみなく完全公開します！<br />
対象期間は始めてアプリをリリースした2009/02/13から2010/01/23までです。<br />
<br />
<span id="more-1727"></span><br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/01/iphone_development_nomovie.006.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/01/iphone_development_nomovie.006-300x225.png" alt="DL数" title="DL数" width="300" height="225" class="alignnone size-medium wp-image-1737" /></a><br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/01/iphone_development_nomovie.009.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/01/iphone_development_nomovie.009-300x225.png" alt="売上" title="売上" width="300" height="225" class="alignnone size-medium wp-image-1738" /></a><br />
<br />
表にするとこんな感じです。<br />
<br />
<table  border="1px">
<tr>
<th>アプリ名</th><th>DL数</th><th>売上(30%カット済)</th>
</tr>
<tr><td>iPachi</td><td>14,986</td><td>-</td></tr>
<tr><td>iSlot Pro</td><td>1,698</td><td>372,799</td></tr>
<tr><td>iTaskTimer</td><td>1,067</td><td>138,799</td></tr>
<tr><td>iTaskTimer Lite</td><td>830</td><td>-</td></tr>
<tr><td>FakeCamera</td><td>5,827</td><td>6,886</td></tr>
</table>
<br />
総DL数は24,409ダウンロード。<br />
総売上は518,484円でした。<br />
(2000万なんて無理&#8230;)<br />
<br />
ちなみにアプリ販売にかかったコストは、iMac、iPhone3G、iPhone3GS、iPod Touch、Macbook Air、アイコン・翻訳その他もろもろで<br />
<br />
515000円！！！<br />
<br />
開発コストはプライスレス換算です。<br />
<br />
つまり一年間の利益は&#8230;<br />
<br />
3434円！！！<br />
<br />
やったぜとうちゃん！&#8230;orz<br />
<br />
ちなみにちょうど先週から黒字のチャンスタイム突入中です。<br />
<br />
無料アプリに有料アプリリンクをつけてからは売上が３倍くらいに増えたので、売上のうち40%は12月と1月のもの。<br />
<br />
1月は13万くらいの売上でフィニッシュしそうです。<br />
<br />
<br />
<br />
<br />
<br />
<br />
</p>
この投稿にタグはありません。
	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li>関連する投稿はありません。</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/02/01/iphone%e3%82%a2%e3%83%97%e3%83%aa%ef%bc%91%e5%b9%b4%e9%96%93%e3%81%ae%e5%a3%b2%e4%b8%8a%e5%a0%b1%e5%91%8a/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Androidアプリで稼げるのかはじめました</title>
		<link>http://iphone.longearth.net/2010/01/31/android%e3%82%a2%e3%83%97%e3%83%aa%e3%81%a7%e7%a8%bc%e3%81%92%e3%82%8b%e3%81%ae%e3%81%8b%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f/</link>
		<comments>http://iphone.longearth.net/2010/01/31/android%e3%82%a2%e3%83%97%e3%83%aa%e3%81%a7%e7%a8%bc%e3%81%92%e3%82%8b%e3%81%ae%e3%81%8b%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 00:00:51 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1721</guid>
		<description><![CDATA[
Androidアプリを作ろうと考えてたんですが、Androidアプリ開発のことをこのブログで書くのはどうかなぁと思ったので「Androidアプリで稼げるのか」を別ブログとしてはじめました。

Androidアプリで稼げ [...]]]></description>
			<content:encoded><![CDATA[<p>
Androidアプリを作ろうと考えてたんですが、Androidアプリ開発のことをこのブログで書くのはどうかなぁと思ったので「Androidアプリで稼げるのか」を別ブログとしてはじめました。<br />
<br />
<a href="http://android.longearth.net" target="_blank">Androidアプリで稼げるのか</a><br />
<br />
こちらのブログの更新も滞っているのでちょっとどこまでかけるか分かりませんが、やれるところまでやってみようと思います。<br />
<br />
一個一個の記事をもっと雑にしてもよいかな。</p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/android/" title="Android" rel="tag nofollow">Android</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li>関連する投稿はありません。</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/01/31/android%e3%82%a2%e3%83%97%e3%83%aa%e3%81%a7%e7%a8%bc%e3%81%92%e3%82%8b%e3%81%ae%e3%81%8b%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPadをどう使うべきか？</title>
		<link>http://iphone.longearth.net/2010/01/29/ipad%e3%82%92%e3%81%a9%e3%81%86%e4%bd%bf%e3%81%86%e3%81%b9%e3%81%8d%e3%81%8b%ef%bc%9f/</link>
		<comments>http://iphone.longearth.net/2010/01/29/ipad%e3%82%92%e3%81%a9%e3%81%86%e4%bd%bf%e3%81%86%e3%81%b9%e3%81%8d%e3%81%8b%ef%bc%9f/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 15:18:10 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[アイデア]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1710</guid>
		<description><![CDATA[
昨日ついにiPad発表されましたね。



前評判通りでがっかりだったとか、予想と外れたとか、iPhoneあるのにわざわざ買う必要あるの？とか、iPadアプリ開発するためにiMac27インチ買うかなとか、iPodと紛ら [...]]]></description>
			<content:encoded><![CDATA[<p>
昨日ついにiPad発表されましたね。<br />
<br />
<a href="http://iphone.longearth.net/wp-content/uploads/2010/01/hero_20100127.png"><img src="http://iphone.longearth.net/wp-content/uploads/2010/01/hero_20100127-247x300.png" alt="hero_20100127" title="hero_20100127" width="247" height="300" class="alignnone size-medium wp-image-1712" /></a><br />
<br />
前評判通りでがっかりだったとか、予想と外れたとか、iPhoneあるのにわざわざ買う必要あるの？とか、iPadアプリ開発するためにiMac27インチ買うかなとか、iPodと紛らわしいよねとか、いろいろ意見が飛び交ってますが、PCとモバイルの隙間を埋めるデバイスだと言われるiPadはどのようなシーンで使えるのか、幸せなiPad生活を妄想してみようと思います。<br />
<span id="more-1710"></span><br />
<h3>デジタルフォトフレーム</h3>
これが僕の大本命な使い方。デジタルフォトフレームは前から欲しかったんです。お好みの写真がふわふわ変わってくiPadのあるお部屋。おしゃれな感じでよさそう。ただ、写真はやっぱりiPhoneから転送できたり、iPhoneをリモコンとして写真選択とかもしたい。そんなアプリを期待。出なければ作る。飾る写真は特にないけど。<br />
<br />
<h3>時計</h3>
次は時計です。僕のイメージでは主に使うのは夜寝るとき。LCD Clockの高解像度版のようなイメージで美しい時計を横目にまどろみたい。夜なのでアラーム機能は欲しいな。もちろんアラーム時間設定はiPhoneから設定できるように。<br />
<br />
<h3>電子ブックリーダー</h3>
あとはやっぱiBooksですね。普段はデジタルフォトフレームとして使っていて、じゃちょっと本でも読もうかなという時にさっとiPadを手に取り椅子に座りながらなめらかぬるぬる読書。うーん妄想しただけでもうたまらない。iPadのおかげでKindleの影がだいぶ薄くなってしまった。何かKindleも打ち出してきて欲しい。<br />
<br />
<h3>家庭内伝言板・コルクボード</h3>
これはファミリー向け。一家に一台iPadを的発想で、コルクボードにメッセージを書いたり、写真を飾ったり、忙しいおかんが子供への伝言板として「冷凍庫に晩ご飯あるから解凍してね」みたいな使い方。そんなの今時メールで十分かなと思ったのですが、小さい子供だったり、反抗期でメールを不快に思うようなお年頃のお子様相手には、逆にこの伝言板が家庭の潤滑油になってくれそうな気もしている。<br />
<br />
<h3>麻雀台</h3>
iPadを麻雀代に見立てて４人で画面をタッチしてじゃらじゃら混ぜてゲーム開始。手配は手元のiPhone/iPod touchで確認。iPadには山と捨て牌を表示。手元のiPhoneで鳴きを指示。あがりはもちろんiPhoneを前へ倒してロン。捨て牌の強打だけは注意。<br />
<br />
<h3>ノート</h3>
やっぱiPadのサイズはノートに最適。手書きメモアプリをiPad用に用意して手書きでメモメモ。学校の授業、ミーティングなどいろいろ使えそう。ページめくりはもちろんスワイプで。音声録音なんかもつけたら音声で議事録とりながら、重要所だけメモとかもできそう。どうせならTwitterへポスト機能もつけてしまえ。うっかり社外秘ポストだけは要注意。<br />
<br />
<h3>アンケート用紙</h3>
このサイズ、紙の代替になんでもマッチしてしまう気がする。なかなか答えてもらえない街角アンケートもiPadなら回答率アップなんてこともあるかも。１ページに収まらなくても指ですーっとスクロールさせるだけでOK。<br />
<br />
<h3>会社の受付に</h3>
会社の受付で担当者をiPadで探してつないでくれるとか想像しただけで憧れる。<br />
<br />
<h3>デスクの横に</h3>
普通にデスクの横にiPad置いて、RSSやTwitter垂れ流しも悪くない。もちろんiCalで予定を表示しておくのもOK。付箋を貼れるアプリでメモも充実。MTGの時はさっそうと手にとりスマートに会議室へ向かおう。<br />
<br />
<h3>寝室に</h3>
iPadは同棲や結婚している二人のコミュニケーションにも最適。恥ずかしがりやでどうしても自分から夜の営みを言い出せない、そんなあなたにiPadを。操作は簡単、タップでハートマークを出すだけ。これがOKサインだ！アプリ名は「i♥u」。完璧すぎる。<br />
<br />
<br />
<br />
などなど。<br />
まだまだいくらでもバリエーションはありそうです。<br />
５万弱でこれだけのことができる端末だと考えるととてもお買い得感があります。<br />
今時ケータイでも６万くらいしますよ。<br />
それがiPadなら少し余分なお金を払うだけでありとあらゆる機能を追加できると。<br />
<br />
男は黙って購入です。<br />
<br />
<br />
</p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/ipad/" title="iPad" rel="tag nofollow">iPad</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li>関連する投稿はありません。</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/01/29/ipad%e3%82%92%e3%81%a9%e3%81%86%e4%bd%bf%e3%81%86%e3%81%b9%e3%81%8d%e3%81%8b%ef%bc%9f/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AppStoreリンクの小ネタ</title>
		<link>http://iphone.longearth.net/2010/01/18/appstore%e3%83%aa%e3%83%b3%e3%82%af%e3%81%ae%e5%b0%8f%e3%83%8d%e3%82%bf/</link>
		<comments>http://iphone.longearth.net/2010/01/18/appstore%e3%83%aa%e3%83%b3%e3%82%af%e3%81%ae%e5%b0%8f%e3%83%8d%e3%82%bf/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 00:00:06 +0000</pubDate>
		<dc:creator>daichi</dc:creator>
				<category><![CDATA[販売促進]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://iphone.longearth.net/?p=1700</guid>
		<description><![CDATA[
AppStoreへの簡単なリンクの作り方が以下に載ってます。
Technical Q&#38;A QA1633: Creating easy-to-read links to the App Store for you [...]]]></description>
			<content:encoded><![CDATA[<p>
AppStoreへの簡単なリンクの作り方が以下に載ってます。<br />
<a href="http://developer.apple.com/iphone/library/qa/qa2008/qa1633.html">Technical Q&amp;A QA1633: Creating easy-to-read links to the App Store for your applications and company</a><br />
<ul>
	<li>アプリ名でリンク</li>
http://itunes.com/apps/アプリ名<br />
	<li>会社名でリンク</li>
http://itunes.com/apps/会社名<br />
	<li>アプリ名と会社名でリンク</li>
http://itunes.com/apps/会社名/アプリ名</ul>
リンクにする時は<br />
<ul>
	<li>大文字は小文字に</li>
	<li>スペースは取り除く</li>
	<li>&#8220;&amp;&#8221;は&#8221;and&#8221;に</li>
	<li>&#8220;!¡&#8221;#$%&#8217;()*+,\-./:;&lt;=&gt;¿?@[\]^_`{|}~&#8221;は取り除く</li>
	<li>アクセント文字(ü, åなど)は元の文字(u, aなど)に置き換える</li>
	<li>&#8220;©&#8221;や&#8221;™&#8221;や&#8221;®&#8221;を取り除く</li>
</ul>
でOK。<br />
<br />
iTaskTimer Liteを例にするなら<br />
<ul>
	<li>アプリ名リンク</li>
http://itunes.com/apps/itasktimerlite<br />
	<li>会社名リンク</li>
http://itunes.com/apps/daichicho<br />
	<li>会社名＋アプリ名リンク</li>
http://itunes.com/apps/daichicho/itasktimerlite<br />
</ul>
でいける。<br />
<br />
こういう情報が流れてくる以下のRSSはとりあえずフィード登録して損なしです。<br />
http://developer.apple.com/rss/iphonedevnews.rss</p>

	<p>タグ: <a href="http://iphone.longearth.net/tag/app-store/" title="App Store" rel="tag nofollow">App Store</a>, <a href="http://iphone.longearth.net/tag/iphone/" title="iphone" rel="tag nofollow">iphone</a>, <a href="http://iphone.longearth.net/tag/%e3%83%8d%e3%82%bf/" title="ネタ" rel="tag nofollow">ネタ</a></p>

	<h4>関連する投稿</h4>
	<ul class="st-related-posts">
	<li><a href="http://iphone.longearth.net/2009/04/20/%e3%80%90iphone%e3%80%91%e3%82%a2%e3%83%97%e3%83%aa%e3%83%8d%e3%82%bf%e3%82%92%e8%80%83%e3%81%88%e3%82%8b%e3%83%a1%e3%83%a2/" title="【iPhone】アプリネタを考えるメモ (2009 年 4 月 20 日)">【iPhone】アプリネタを考えるメモ</a> </li>
	<li><a href="http://iphone.longearth.net/2009/05/16/%e7%b7%8f%e5%90%88%e5%a3%b2%e4%b8%8a/" title="総合売上 (2009 年 5 月 16 日)">総合売上</a> </li>
	<li><a href="http://iphone.longearth.net/2009/05/09/%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92iphone-os-30%e3%81%b8%e5%af%be%e5%bf%9c%e3%81%95%e3%81%9b%e3%82%8b%e6%99%82%e3%81%8c%e3%81%8d%e3%81%be%e3%81%97%e3%81%9f/" title="アプリをiPhone OS 3.0へ対応させる時がきました (2009 年 5 月 9 日)">アプリをiPhone OS 3.0へ対応させる時がきました</a> </li>
	<li><a href="http://iphone.longearth.net/2009/03/29/%e3%80%90%e3%83%8b%e3%82%b3%e3%83%8b%e3%82%b3%e3%80%91iphone%e3%82%a2%e3%83%97%e3%83%aa%e8%b2%a9%e4%bf%83%e7%94%a8%e3%83%87%e3%83%a2%e5%8b%95%e7%94%bb%e3%82%92%e4%bd%9c%e6%88%90%e3%81%97%e3%81%a6/" title="【ニコニコ】iPhoneアプリ販促用デモ動画を作成してみた (2009 年 3 月 29 日)">【ニコニコ】iPhoneアプリ販促用デモ動画を作成してみた</a> </li>
	<li><a href="http://iphone.longearth.net/2009/05/21/%e3%80%90%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%80%91lancers%e3%81%a7%e4%be%9d%e9%a0%bc%e3%81%97%e3%81%9f%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e7%b4%8d%e5%93%81%e3%81%97%e3%81%a6%e3%82%82%e3%82%89/" title="【デザイン】Lancersで依頼したアイコン納品してもらった (2009 年 5 月 21 日)">【デザイン】Lancersで依頼したアイコン納品してもらった</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://iphone.longearth.net/2010/01/18/appstore%e3%83%aa%e3%83%b3%e3%82%af%e3%81%ae%e5%b0%8f%e3%83%8d%e3%82%bf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
