<?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>橋本商会 &#187; HTTP</title>
	<atom:link href="http://shokai.org/blog/archives/tag/http/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Mon, 06 Feb 2012 13:32:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>Rubyでcometサーバー作る</title>
		<link>http://shokai.org/blog/archives/5712</link>
		<comments>http://shokai.org/blog/archives/5712#comments</comments>
		<pubDate>Mon, 21 Nov 2011 18:18:20 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[EventMachine]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=5712</guid>
		<description><![CDATA[最近cometとかいう最新技術が流行っているらしいので、eventmachine_httpserverで作ってみた。 ここにサーバーとクライアントの例がある。どっちも50行ぐらいで実装できた。 comet at mast [...]]]></description>
			<content:encoded><![CDATA[<p>
最近cometとかいう最新技術が流行っているらしいので、eventmachine_httpserverで作ってみた。<br />
<br />
<br />
ここにサーバーとクライアントの例がある。どっちも50行ぐらいで実装できた。<br />
<a href="https://github.com/shokai/eventmachine-study/tree/master/comet">comet at master from shokai/eventmachine-study &#8211; GitHub</a><br />
<br />
サーバー起動して、タイムアウトを10秒に指定。<br />
このサーバーは、POSTされた値を保持して、GETされたら返す。GETに対してはレスポンスを遅らせて返す。<br />
<pre class="prettyprint">
ruby server.rb 8080 10<br />
</pre>
<br />
<br />
クライアントを起動。GETしてから25秒後にPOST<br />
<pre class="prettyprint">
ruby client.rb 25<br />
</pre>
<pre>
GET(comet) -> wait 25 sec -> POST<br />
* GET<br />
sleep 25 sec<br />
404  ## 10秒経過、切断された<br />
<br />
* GET  ## 再接続<br />
404<br />
<br />
* GET  ## 3回目<br />
* POST kazusuke<br />
POST success<br />
200<br />
kazusuke<br />
200  ## 5秒待ってようやく値が返ってきた<br />
kazusuke<br />
* GET<br />
</pre>
<br />
サーバー側のログはこんなんなってた<br />
<pre>
http server start, port:8080, comet_timeout:10(sec)<br />
load: 2.20  cmd: ruby 11481 waiting 0.45u 0.32s<br />
request_method : GET<br />
path_info : /message<br />
query_str :<br />
post_content :<br />
request_method : GET<br />
path_info : /message<br />
query_str :<br />
post_content :<br />
request_method : POST<br />
path_info : /message<br />
query_str :<br />
post_content : kazusuke<br />
kazusuke<br />
request_method : GET<br />
path_info : /message<br />
query_str :<br />
post_content :<br />
</pre>
<br />
cometサーバー、接続が不安定なクライアントにpush通知するのに便利。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/5712/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AndroidでHTTP POST</title>
		<link>http://shokai.org/blog/archives/5509</link>
		<comments>http://shokai.org/blog/archives/5509#comments</comments>
		<pubDate>Fri, 13 May 2011 08:46:42 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[EventMachine]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=5509</guid>
		<description><![CDATA[targetはAndroid2.3.4、API 10向けにビルドして試した。 参考： 黒点観測記: AndroidのHttpのPostでもはまる HTTP Post通信での文字化け &#8211; 日本Androidの会 [...]]]></description>
			<content:encoded><![CDATA[<p>
targetはAndroid2.3.4、API 10向けにビルドして試した。<br />
<br />
参考：<br />
<ul>
  <li><a href="http://yoko-gb.blogspot.com/2010/06/androidhttppost.html">黒点観測記: AndroidのHttpのPostでもはまる</a></li>
  <li><a href="http://groups.google.com/group/android-group-japan/browse_thread/thread/d9a5d1b4c128be7d?pli=1">HTTP Post通信での文字化け &#8211; 日本Androidの会 | Google グループ</a></li>
</ul>
<br />
<pre class="prettyprint">
&lt;uses-permission android:name="android.permission.INTERNET" /&gt;<br />
</pre>
<br />
<pre class="prettyprint">
import java.io.*;<br />
import java.util.*;<br />
import org.apache.http.*;<br />
import org.apache.http.client.HttpClient;<br />
import org.apache.http.client.entity.UrlEncodedFormEntity;<br />
import org.apache.http.client.methods.HttpPost;<br />
import org.apache.http.impl.client.DefaultHttpClient;<br />
import org.apache.http.message.BasicNameValuePair;<br />
</pre>
<br />
<pre class="prettyprint">
HttpClient client = new DefaultHttpClient();<br />
HttpPost httppost = new HttpPost("http://localhost:8080");<br />
List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();<br />
params.add(new BasicNameValuePair("message", "ほむ"));<br />
try{<br />
    httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));<br />
    HttpResponse res = client.execute(httppost);<br />
    ByteArrayOutputStream os = new ByteArrayOutputStream();<br />
    res.getEntity().writeTo(os);<br />
    Log.v("result", os.toString());<br />
    Log.v("status", res.getStatusLine().getStatusCode());<br />
}<br />
catch(Exception e){<br />
    e.printStackTrace();<br />
}<br />
</pre>
<br />
<br />
リクエストができているかの確認は、EM::HttpServerで見た<br />
<pre>
gem install eventmachine_httpserver<br />
</pre>
<pre class="prettyprint">
#!/usr/bin/env ruby<br />
require 'rubygems'<br />
require 'eventmachine'<br />
require 'evma_httpserver'<br />
<br />
class Handler  &lt; EM::Connection<br />
  include EM::HttpServer<br />
 <br />
  def process_http_request<br />
    res = EM::DelegatedHttpResponse.new(self)<br />
    puts "request_method : #{@http_request_method}"<br />
    puts "path_info : #{@http_path_info}"<br />
    puts "query_str : #{@http_query_string}"<br />
    puts "post_content : #{@http_post_content}"<br />
    res.status = 200<br />
    res.content = "こんにちは"<br />
    res.send_response<br />
  end<br />
end<br />
<br />
EM::run do<br />
  EM::start_server("0.0.0.0", 8080, Handler)<br />
  puts "http server start, prot 8080"<br />
end<br />
</pre>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/5509/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>serial-http-gateway作った</title>
		<link>http://shokai.org/blog/archives/5439</link>
		<comments>http://shokai.org/blog/archives/5439#comments</comments>
		<pubDate>Fri, 04 Feb 2011 06:48:04 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[EventMachine]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[serial-http-gateway]]></category>
		<category><![CDATA[SerialPort]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=5439</guid>
		<description><![CDATA[シリアルポートをhttpで使えるツールを作った。 ブラウザでhttp://localhost:8783を開くとデータが読める。POSTでデータを送ると書き込める。 webブラウザでロボットを操作する部分がある、OB降臨シ [...]]]></description>
			<content:encoded><![CDATA[<p>
シリアルポートをhttpで使えるツールを作った。<br />
ブラウザで<a href="http://localhost:8783">http://localhost:8783</a>を開くとデータが読める。POSTでデータを送ると書き込める。<br />
<br />
webブラウザでロボットを操作する部分がある、OB降臨システムというのを作っているのでその部品として作った。<br />
<br />
githubに全部置いた。<br />
<ul>
  <li><a href="https://github.com/shokai/serial-http-gateway">shokai/serial-http-gateway &#8211; GitHub</a></li>
</ul>
<br />
<br />
■インストールと起動<br />
<pre>
git clone git://github.com/shokai/serial-http-gateway.git<br />
cd serial-http-gateway<br />
gem install serialport eventmachine eventmachine_httpserver json ArgsParser<br />
</pre>
<br />
<br />
Arduino等をMacに接続すると/dev/tty.usb〜〜という名前になる。引数に渡して起動する。<br />
<pre>
./serial-http-gateway --help<br />
./serial-http-gateway /dev/tty.usbserial-A7006Rqn<br />
</pre>
port 8783で起動する。引数-portで変更できる。<br />
<br />
<br />
<br />
gemが全て入っていれば実行ファイル単体で動くので、適当なパスが通っている場所にコピーして置くと便利。<br />
<pre>
sudo cp serial-http-gateway /usr/local/sbin/<br />
</pre>
<br />
<br />
<br />
■使う<br />
HTTP POSTでシリアルポートに書き込める。<br />
<pre>
% curl -d 'testtest' 'http://localhost:8783'<br />
</pre>
<br />
<br />
HTTP-GETでシリアルポートからのデータが読める。<br />
最近100件の受信データが保存してあって配列で返ってくる。timeに時間が入っている。<br />
<pre>
curl 'http://localhost:8783'<br />
</pre>
<br />
<br />
時間はミリ秒でunixtimeなので、1000で割れば普通のunixtimeになる<br />
<pre class="prettyprint">
[{"data":287,"time":1296767483756},{"data":288,"time":1296767483253},{"data":291,"time":1296767482751},{"data":293,"time":1296767482246},{"data":292,"time":1296767481743},{"data":293,"time":1296767481238},{"data":294,"time":1296767480736},{"data":299,"time":1296767480233},{"data":303,"time":1296767479729},{"data":305,"time":1296767479226},{"data":307,"time":1296767478721},{"data":312,"time":1296767478219},{"data":321,"time":1296767477714},{"data":332,"time":1296767477211},{"data":344,"time":1296767476709},{"data":359,"time":1296767476204},{"data":"\u0000390","time":1296767475701}]<br />
</pre>
<br />
<br />
eventmachine_httpserver便利だなー</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/5439/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Androidのギャラリーの「共有」メニューから呼び出せるアプリを作る</title>
		<link>http://shokai.org/blog/archives/5401</link>
		<comments>http://shokai.org/blog/archives/5401#comments</comments>
		<pubDate>Fri, 05 Nov 2010 06:25:47 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Intent]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=5401</guid>
		<description><![CDATA[Androidのカメラで撮影した画像はギャラリーに保存される。そこで画像を選んで共有またはshareなどを選択すると、暗黙的Intent呼び出しで画像を別アプリに渡せる。 Flickrアップローダとか、Evernoteと [...]]]></description>
			<content:encoded><![CDATA[<p>
Androidのカメラで撮影した画像はギャラリーに保存される。そこで画像を選んで共有またはshareなどを選択すると、暗黙的Intent呼び出しで画像を別アプリに渡せる。<br />
Flickrアップローダとか、EvernoteとかDropboxのアプリに写真を渡しているのはこのしくみを使っている。<br />
<br />
<br />
まずManifest.xmlにintent-filterを追加する。<br />
image/*でもいいが、それだと動画も渡せてしまうので手当たり次第mimeTypeを指定してみる。<br />
<pre class="prettyprint">
&lt;intent-filter&gt;<br />
  &lt;action android:name="android.intent.action.SEND" /&gt;<br />
  &lt;category android:name="android.intent.category.DEFAULT" /&gt;<br />
  &lt;data android:mimeType="image/jpeg"/&gt;<br />
  &lt;data android:mimeType="image/jpg"/&gt;<br />
  &lt;data android:mimeType="image/png"/&gt;<br />
  &lt;data android:mimeType="image/bmp"/&gt;<br />
  &lt;data android:mimeType="image/bitmap"/&gt;<br />
&lt;/intent-filter&gt;<br />
</pre>
ようするに、アプリに「私はimageをSENDするというアクションを受け取って適当に処理できますよ」と宣言させておくと、<br />
他のアプリが「誰でもいいからSENDしたimageを受け取ってくれる人いませんか」と呼び出したときに連携できるようになる。<br />
<br />
<br />
で、このintent-filterと関連付けられているクラス（普通なら一番最初に生成したjavaクラス）の<br />
onCreate()内でintentを受け取る。<br />
あらかじめ、受け取った画像を表示するためのImageViewを配置しておく。<br />
<pre class="prettyprint">
private ImageView imageView;<br />
this.imageView = (ImageView)this.findViewById(R.id.ImageView01);<br />
</pre>
<br />
<br />
暗黙的Intentで呼び出されたのか、普通のIntent呼び出しで起動したのか（つまりホーム画面からアプリのアイコンを押して起動したのか）を判別して処理する。<br />
呼び出し元の名前だけで判別してる<br />
<pre class="prettyprint">
Uri imageUri = null;<br />
try{<br />
    imageUri = Uri.parse(getIntent().getExtras().get("android.intent.extra.STREAM").toString());<br />
}<br />
catch(Exception e){<br />
    e.printStackTrace();<br />
}<br />
if (imageUri != null) {<br />
    Log.v("ImageIntent", "暗黙的intentから起動");<br />
    Bitmap bmp = null;<br />
    try {<br />
        bmp = Media.getBitmap(getContentResolver(), imageUri);<br />
    }<br />
    catch (FileNotFoundException e) {<br />
        e.printStackTrace();<br />
    }<br />
    catch (IOException e) {<br />
        e.printStackTrace();<br />
    }<br />
    if (bmp != null) {<br />
        this.imageView.setImageBitmap(bmp);<br />
    }<br />
}<br />
else{<br />
    Log.v("ImageIntent", "普通に起動");<br />
}<br />
</pre>
imageUriにはcontent://media〜〜というパスが入る。これはAndroid内のファイルシステムのパスではないが、Media.getBitmapに渡すとデータを読み出せる。<br />
とりあえずImageViewに表示だけしておく。<br />
<br />
<br />
あとEclipseだと日本語が化けるので<a href="http://shokai.org/blog/archives/5193">terminalからadb logcat</a>してる。<br />
<br />
<br />
Bitmapを受け取ったら、後は適当に処理すれば良い。<br />
リサイズとか<br />
<pre class="prettyprint">
public Bitmap resize(Bitmap bmp, float scale){<br />
    Matrix matrix = new Matrix();<br />
    matrix.postScale(scale, scale);<br />
    return Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);<br />
}<br />
</pre>
<br />
<br />
<br />
form/multipart-dataでgyazo.comにアップロードするとか、色々できる。<br />
Manifest.xmlにpermissionを追加<br />
<pre class="prettyprint">
&lt;uses-permission android:name="android.permission.INTERNET" /&gt;<br />
&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;<br />
</pre>
<pre class="prettyprint">
public void upload(Bitmap bmp) throws ParseException, IOException{<br />
    File dataDir = new File(Environment.getExternalStorageDirectory(), this.getPackageName());<br />
    dataDir.mkdirs();<br />
    FileOutputStream tmp = new FileOutputStream(new File(dataDir, "tmp.png"));<br />
    bmp.compress(Bitmap.CompressFormat.PNG, 80, tmp);<br />
    tmp.close();<br />
    <br />
    HttpClient httpClient = new DefaultHttpClient();<br />
    HttpPost post = new HttpPost("http://gyazo.com/upload.cgi");<br />
    MultipartEntity entity = new MultipartEntity();<br />
    <br />
    entity.addPart("id", new StringBody("your-gyazo-id"));<br />
    entity.addPart("imagedata", new FileBody(new File(dataDir, "tmp.png"), "image/png"));<br />
    post.setEntity(entity);<br />
    post.setHeader("User-Agent", "TestAndroidApp/0.1");<br />
<br />
    httpClient.execute(post);<br />
}<br />
</pre>
httpでform/multipart-dataでアップロードするには<br />
<ul>
  <li>apache-mime4j-0.6.jar → <a href="http://james.apache.org/mime4j/">http://james.apache.org/mime4j/</a> からダウンロード</li>
  <li>httpmime-4.0.3.jar → <a href="http://hc.apache.org/downloads.cgi">http://hc.apache.org/downloads.cgi</a> の httpcomponents-client-4.0-bin.zip 中に入っている</li>
</ul>
の2つが必要。<br />
<br />
<br />
■参考<br />
このへんが参考になった<br />
<ul>
  <li><a href="http://d.hatena.ne.jp/ryopei/20091201/1259668685">&quot;Andoridでmultipart/form-dataのPOST&quot;の続き &#8211; りょーぺいの日記</a></li>
  <li><a href="http://www.xn--rhq6sw9f0w7aevaf9ak89m.jp/android/androidLecture/Intent2/Intent2.html">Intentチュートリアル2</a></li>
  <li><a href="http://www.saturn.dti.ne.jp/~npaka/android/IntentReceiverEx/index.html">Androidメモ</a></li>
  <li><a href="http://stackoverflow.com/questions/559902/android-how-can-i-convert-android-net-uri-object-to-java-net-uri-object">Android- how can I convert android.net.Uri object to java.net.URI object? &#8211; Stack Overflow</a></li>
  <li><a href="http://d.hatena.ne.jp/hidecheck/20090526/1243361773">画像のリサイズとか回転 &#8211; hidecheckの日記</a></li>
</ul>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/5401/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mbedで取得したセンサーの値をsinatra+tokyocabinetで保存する</title>
		<link>http://shokai.org/blog/archives/5133</link>
		<comments>http://shokai.org/blog/archives/5133#comments</comments>
		<pubDate>Sun, 25 Apr 2010 14:06:00 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AD変換]]></category>
		<category><![CDATA[CdS]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[mbed]]></category>
		<category><![CDATA[NXP LPC1768]]></category>
		<category><![CDATA[Sinatra]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[TokyoCabinet]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=5133</guid>
		<description><![CDATA[まずセンサーのデータを時系列で溜めたり、取り出したりするためのwebサービスをsinatra+TokyoCabinetで作っておいた。 http://shokai.mag.keio.ac.jp/sensor-storag [...]]]></description>
			<content:encoded><![CDATA[<p>
まずセンサーのデータを時系列で溜めたり、取り出したりするためのwebサービスをsinatra+TokyoCabinetで作っておいた。<br />
<ul><li><a href="http://shokai.mag.keio.ac.jp/sensor-storage/">http://shokai.mag.keio.ac.jp/sensor-storage/</a></li></ul>
<br />
そこに<a href="http://shokai.org/blog/archives/5103">mbedのADコンバータでCdSの明るさを計測、LEDを点灯/消灯</a> と <a href="http://shokai.org/blog/archives/5122">mbedにEthernetを接続しtwitterにpostする</a>を合体させ、約10秒間隔でセンサーの値をhttp-postしまくった。<br />
<br />
一度web APIが出ている場所にマイコンの情報も保存しておけば、あとでマッシュアップできて便利になる。このAPIの下にmbedでもgreasemonkeyスクリプトでも何個でもぶら下げられる。<br />
mbedからwedataに保存しても良かったんだけど、あえて自分で作ってみた。<br />
<br />
<br />
<br />
■mbedで明るさを計測してhttp-postする<br />
作った回路。CdSで明るさを取得し、LEDで明るさを表示する。mbedのRD+,RD-,TD+,TD-ピンにトランス入りEthernetジャックを接続し、LANケーブルを刺した。<br />
<a href="http://www.flickr.com/photos/shokai/4542750897/" title="mbed ethernet by shokai, on Flickr"><img src="http://farm5.static.flickr.com/4062/4542750897_5bef39c143.jpg" width="500" height="375" alt="mbed ethernet" /></a><br />
<br />
<br />
プログラム。CdSに入る光量が少なくなると緑色のLEDが光る。http-postは<a href="http://mbed.org/handbook/Ticker">Ticker</a>で定期的に呼び出したかったが、Ticker内でHTTPClient.hの関数を使うとmainに戻ってこなくなるので仕方なくmain内で20ループ毎（約10秒毎）にHTTPClient.post()するようにした。stdは使えるけど、pthread等のスレッド機能は無いみたいなのでこれは痛い。<br />
<a href="http://mbed.org/users/shokai/programs/sensor_http_post/5zclj/">sensor_http_post | mbed</a><br />
<pre class="prettyprint">
#include&nbsp;"mbed.h"<br />
#include&nbsp;"HTTPClient.h"<br />
#include&nbsp;&lt;string&gt;<br />
using&nbsp;namespace&nbsp;std;<br />
<br />
Serial&nbsp;pc(USBTX,&nbsp;USBRX);<br />
<br />
DigitalOut&nbsp;led1(LED1);&nbsp;//&nbsp;blink<br />
DigitalOut&nbsp;led2(LED2);&nbsp;//&nbsp;blink&nbsp;when&nbsp;http-post<br />
DigitalOut&nbsp;led3(p11);&nbsp;//&nbsp;represent&nbsp;ADC&nbsp;value<br />
<br />
AnalogIn&nbsp;adc(p15);<br />
float&nbsp;ain;<br />
<br />
HTTPClient&nbsp;http;&nbsp;//&nbsp;use&nbsp;DHCP<br />
<br />
const&nbsp;string&nbsp;api_uri&nbsp;=&nbsp;"http://shokai.mag.keio.ac.jp/sensor-storage/shokai/cds/";<br />
const&nbsp;string&nbsp;mbed_name&nbsp;=&nbsp;"shokai-mbed01";<br />
const&nbsp;string&nbsp;sensor_name&nbsp;=&nbsp;"CdS";<br />
<br />
void&nbsp;blink_led(DigitalOut&nbsp;led,&nbsp;int&nbsp;num){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;&nbsp;i&nbsp;&lt;&nbsp;num*2;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led&nbsp;=&nbsp;!led;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(0.1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
void&nbsp;post_sensor_value(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;blink_led(led2,&nbsp;2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;query[256]&nbsp;=&nbsp;"";<br />
&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;result[4096]&nbsp;=&nbsp;"";&nbsp;//&nbsp;4kb<br />
&nbsp;&nbsp;&nbsp;&nbsp;sprintf(query,&nbsp;"name=%s&amp;%s=%f",&nbsp;mbed_name.c_str(),&nbsp;sensor_name.c_str(),&nbsp;(float)ain);<br />
&nbsp;&nbsp;&nbsp;&nbsp;pc.printf("post:%s&nbsp;=&gt;&nbsp;%s\n",&nbsp;query,&nbsp;api_uri.c_str());<br />
&nbsp;&nbsp;&nbsp;&nbsp;http.post(api_uri.c_str(),&nbsp;query,&nbsp;result,&nbsp;4096);<br />
&nbsp;&nbsp;&nbsp;&nbsp;pc.printf("%s\n",&nbsp;result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;blink_led(led2,&nbsp;2);<br />
}<br />
<br />
int&nbsp;main(void){<br />
&nbsp;&nbsp;&nbsp;&nbsp;led1&nbsp;=&nbsp;1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;count&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while(1)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ain&nbsp;=&nbsp;adc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc.printf("sensor:%f\n",&nbsp;float(ain));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led1&nbsp;=&nbsp;!led1;&nbsp;//&nbsp;blink&nbsp;LED<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ain&nbsp;&gt;&nbsp;0.1)&nbsp;led3&nbsp;=&nbsp;0;&nbsp;//&nbsp;represent&nbsp;CdS&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;led3&nbsp;=&nbsp;1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count&nbsp;&gt;&nbsp;20){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_sensor_value();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(0.5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</pre>
せっかくC++が使えて、mbed.hのAPIはC++っぽいのに、HTTPClient.hはそうでもないみたいだ。<br />
mbedのローカルのストレージがfopenで読めるので、そこに設定ファイルを置けるようにしたい。yamlやjsonをparseするライブラリを作りたい。<br />
<br />
<br />
<br />
動作はシリアル通信で見れる。表示には<a href="http://d.hatena.ne.jp/shokai/20091202/1259771007">serialterm.rb</a>を使った。<br />
postすると返り値がjsonで来る。<br />
<a href="http://www.flickr.com/photos/shokai/4548467014/" title="mbed http-post by shokai, on Flickr"><img src="http://farm5.static.flickr.com/4049/4548467014_16fe86cdbe_o.png" width="817" height="862" alt="mbed http-post" /></a><br />
<br />
<br />
<br />
■tokyocabinetとsinatraでデータを溜めるAPIを作る<br />
できたもの<br />
<a href="http://shokai.mag.keio.ac.jp/sensor-storage/">sensor-storage API</a><br />
<br />
<br />
githubでソースを全部公開しておいた。<br />
<a href="http://github.com/shokai/sensor-storage">shokai&apos;s sensor-storage at master &#8211; GitHub</a><br />
<br />
<br />
http://shokai.mag.keio.ac.jp/sensor-storage/ にhttp-postした内容を、json stringにエンコードして時刻_マイクロ秒をキーにしてTokyoCabinetに保存する。<br />
keyの _ の左側が時刻になっているので後で使う時に便利。<br />
<br />
<a href="http://shokai.mag.keio.ac.jp/sensor-storage/keys">http://shokai.mag.keio.ac.jp/sensor-storage/keys</a> で保存されているkeyの一覧がJSON形式で見れる。<br />
<a href="http://shokai.mag.keio.ac.jp/sensor-storage/recent">http://shokai.mag.keio.ac.jp/sensor-storage/recent</a>で最近10件のkeyとvalueが取れる。他にも<a href="http://shokai.mag.keio.ac.jp/sensor-storage/recent/4">recent/件数</a>や、<a href="http://shokai.mag.keio.ac.jp/sensor-storage/last">last</a>(最後に入れたデータ)、<a href="http://shokai.mag.keio.ac.jp/sensor-storage/count">count</a>(データ件数)などのAPIがある。<br />
<br />
<br />
今回のmbedでCdSの値を保存しているのは <a href="http://shokai.mag.keio.ac.jp/sensor-storage/shokai/cds/recent">http://shokai.mag.keio.ac.jp/sensor-storage/shokai/cds/recent</a> になる。shokai/cds/last , shokai/cds/recent , shokai/cds/count などで色々データが取り出せる。<br />
<br />
/ 以下に適当に文字列を付けると新しくDBを作るようになっている。もしデータをpostしてみたいなら、<a href="http://mbed.org/users/shokai/programs/sensor_http_post/5zclj/">mbedの方のコード</a>は/shokai/cds/をハードコーディングしているので、そこを適当に変えてから使ってくれるとうれしい<br />
あまりにも大きいデータは入らない。<br />
<br />
<br />
スクリプト自体はわりとシンプル。sinatra使って1ファイルに書いてある。<br />
<a href="http://github.com/shokai/sensor-storage/blob/master/server/main.rb">server/main.rb at master from shokai&apos;s sensor-storage &#8211; GitHub</a><br />
<pre class="prettyprint">
#!/usr/bin/env&nbsp;ruby<br />
#&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-<br />
require&nbsp;'rubygems'<br />
require&nbsp;'sinatra'<br />
require&nbsp;'sinatra/reloader'&nbsp;if&nbsp;development?<br />
require&nbsp;'rack'<br />
require&nbsp;'json'<br />
require&nbsp;'tokyocabinet'<br />
include&nbsp;TokyoCabinet<br />
<br />
@@dbdir&nbsp;=&nbsp;'db'<br />
<br />
def&nbsp;db_open(dbname='/')<br />
&nbsp;&nbsp;dbname&nbsp;=&nbsp;dbname.to_s.gsub(/\//,&nbsp;'_')<br />
&nbsp;&nbsp;@hdb&nbsp;=&nbsp;HDB.new<br />
&nbsp;&nbsp;Dir.mkdir(@@dbdir)&nbsp;if&nbsp;!File.exists?(@@dbdir)<br />
&nbsp;&nbsp;@hdb.open("#{@@dbdir}/_#{dbname}.tch",&nbsp;HDB::OWRITER|HDB::OCREAT)&nbsp;&nbsp;<br />
end<br />
<br />
after&nbsp;do<br />
&nbsp;&nbsp;@hdb.close&nbsp;if&nbsp;@hdb<br />
end<br />
<br />
get&nbsp;'*/'&nbsp;do<br />
&nbsp;&nbsp;path&nbsp;=&nbsp;"../"&nbsp;*&nbsp;params[:splat].first.count('/')<br />
&nbsp;&nbsp;redirect&nbsp;"#{path}./readme"<br />
end<br />
<br />
get&nbsp;'*/keys'&nbsp;do<br />
&nbsp;&nbsp;db_open(params[:splat])<br />
&nbsp;&nbsp;@hdb.keys.reverse[0...10000].to_json<br />
end<br />
<br />
get&nbsp;'/dbs'&nbsp;do<br />
&nbsp;&nbsp;Dir::glob("#{@@dbdir}/*.tch").map{|i|<br />
&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;i.to_s.scan(/.*\/(.+)\.tch/).first.to_s.gsub(/_/,'/')<br />
&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;name.split(//u)<br />
&nbsp;&nbsp;&nbsp;&nbsp;tmp.shift<br />
&nbsp;&nbsp;&nbsp;&nbsp;tmp.to_s&nbsp;+&nbsp;"/"<br />
&nbsp;&nbsp;}.uniq.delete_if{|i|<br />
&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=~&nbsp;/\/\//<br />
&nbsp;&nbsp;}.sort.to_json<br />
end<br />
<br />
get&nbsp;'*/count'&nbsp;do<br />
&nbsp;&nbsp;db_open(params[:splat])<br />
&nbsp;&nbsp;{"count",&nbsp;@hdb.rnum}.to_json<br />
end<br />
<br />
get&nbsp;'*/last'&nbsp;do<br />
&nbsp;&nbsp;db_open(params[:splat])<br />
&nbsp;&nbsp;key&nbsp;=&nbsp;@hdb.keys.last<br />
&nbsp;&nbsp;{key,&nbsp;@hdb[key]}.to_json<br />
end<br />
<br />
get&nbsp;'*/recent'&nbsp;do<br />
&nbsp;&nbsp;db_open(params[:splat])<br />
&nbsp;&nbsp;@hdb.keys.reverse[0...10].map{|k|&nbsp;{k,&nbsp;@hdb[k]}&nbsp;}.to_json<br />
end<br />
<br />
get&nbsp;'*/recent/:num'&nbsp;do<br />
&nbsp;&nbsp;db_open(params[:splat])<br />
&nbsp;&nbsp;num&nbsp;=&nbsp;[params[:num].to_i,&nbsp;1000].min<br />
&nbsp;&nbsp;@hdb.keys.reverse[0...num].map{|k|&nbsp;{k,&nbsp;@hdb[k]}}.to_json<br />
end<br />
<br />
get&nbsp;'*/:tc_key'&nbsp;do<br />
&nbsp;&nbsp;db_open(params[:splat])<br />
&nbsp;&nbsp;key&nbsp;=&nbsp;params[:tc_key]<br />
&nbsp;&nbsp;{key,&nbsp;@hdb[key]}.to_json<br />
end<br />
<br />
post&nbsp;'*/'&nbsp;do<br />
&nbsp;&nbsp;db_open(params[:splat])<br />
&nbsp;&nbsp;now&nbsp;=&nbsp;Time.now<br />
&nbsp;&nbsp;key&nbsp;=&nbsp;"#{now.to_i}_#{now.usec}"<br />
&nbsp;&nbsp;params.delete(:splat.to_s)<br />
&nbsp;&nbsp;@hdb.put(key,&nbsp;params.to_json)<br />
&nbsp;&nbsp;{key,&nbsp;@hdb[key]}.to_json<br />
end<br />
<br />
delete&nbsp;'*/:tc_key'&nbsp;do<br />
key&nbsp;=&nbsp;params[:tc_key]<br />
&nbsp;&nbsp;v&nbsp;=&nbsp;@hdb[params[:tc_key]]<br />
&nbsp;&nbsp;@hdb.out(params[:tc_key])<br />
&nbsp;&nbsp;{key,v}.to_json<br />
end<br />
</pre>
<br />
<br />
<a href="http://github.com/shokai/sensor-storage/tree/master/misc/">githubのmiscディレクトリ以下</a>にテスト用にhttp postしたりするためのスクリプトがある。mbedが無い時の動作チェックにどうぞ。<br />
<br />
<br />
サーバーはthinで10個preforkさせておいて、それぞれ別のportで起動させてある。apache2のmod_proxy_balancerでそこにproxyして、80番ポートのサブディレクトリ下にあるように見せている。<br />
<br />
<br />
<ul>
  <li><a href="http://shokai.org/blog/archives/4717">橋本商会  apache2のサブディレクトリをthinで起動してるsinatraにプロキシする</a></li>
  <li><a href="http://d.hatena.ne.jp/shokai/20100421/1271829071">ubuntu8.04にtokyocabinetインストール &#8211; 橋本詳解</a></li>
  <li><a href="http://d.hatena.ne.jp/shokai/20100319/1269016317">Macにtokyocabinetインストール &#8211; 橋本詳解</a></li>
  <li><a href="http://d.hatena.ne.jp/shokai/20100423/1272009141">開発時に自動リロードする &#8211; 橋本詳解</a></li>
  <li><a href="http://d.hatena.ne.jp/shokai/20090812/1250107072">shotgunでコード自動リロードを有効にする &#8211; 橋本詳解</a></li>
</ul>
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/5133/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mbedにEthernetを接続しtwitterにpostする</title>
		<link>http://shokai.org/blog/archives/5122</link>
		<comments>http://shokai.org/blog/archives/5122#comments</comments>
		<pubDate>Wed, 21 Apr 2010 15:04:49 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Ethernet]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[mbed]]></category>
		<category><![CDATA[NXP LPC1768]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=5122</guid>
		<description><![CDATA[@1VQ9の助力を得てmbedがethernetにつながった。1VQ9はパルストランスも通さず、分解したLANケーブルをmbedに直接差し込んで動かしてたけど、俺はmbed Ethernet Testingに従ってパルス [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://twitter.com/1VQ9/status/12349635733">@1VQ9の助力</a>を得てmbedがethernetにつながった。1VQ9はパルストランスも通さず、分解したLANケーブルをmbedに直接差し込んで動かしてたけど、俺は<a href="http://mbed.org/users/no2chem/notebook/ethernet-testing/">mbed Ethernet Testing</a>に従ってパルストランス入りのEthernet jackを使った。<br />
<ul><li><a href="http://www.switch-science.com/products/detail.php?product_id=265">スイッチサイエンス/商品詳細 イーサネット用RJ45ジャック(トランス入り)</a></li></ul>
<br />
<br />
ethernetにつないだところ<br />
<a href="http://www.flickr.com/photos/shokai/4530984658/" title="mbed + ethernet by shokai, on Flickr"><img src="http://farm5.static.flickr.com/4017/4530984658_51c07a8036.jpg" width="500" height="375" alt="mbed + ethernet" /></a><br />
mbedとethernet jackは<br />
<ul>
<li>mbed p1 = Ethernet RD+</li>
<li>p2 = RD-</li>
<li>p7 = TD-</li>
<li>p8 = TD+</li>
</ul>
という風に接続した。<a href="http://mbed.org/projects/cookbook/wiki/EthernetTest">こっちでは別のつなぎ方</a>をしているが、この配置だと動かなかったのでjack毎に違うのかもしれない。よくわからない。<br />
<br />
<br />
配線はこっちの方が見やすいかも<br />
<a href="http://www.flickr.com/photos/shokai/4530348779/" title="mbed + ethernet by shokai, on Flickr"><img src="http://farm5.static.flickr.com/4065/4530348779_7b860c0cf2.jpg" width="500" height="375" alt="mbed + ethernet" /></a><br />
<br />
<br />
裏のピン配置がブレッドボードに刺せるピッチ幅ではなかったので、秋月で100円で売ってる両面ガラススルーホール基盤の切れ端とピンヘッダを駆使してピン配置を変更した。<br />
<a href="http://www.flickr.com/photos/shokai/4525012639/" title="ethernet jack for breadboard by shokai, on Flickr"><img src="http://farm5.static.flickr.com/4037/4525012639_f15605d969.jpg" width="500" height="375" alt="ethernet jack for breadboard" /></a><br />
<a href="http://www.flickr.com/photos/shokai/4525012453/" title="ethernet jack for breadboard by shokai, on Flickr"><img src="http://farm5.static.flickr.com/4072/4525012453_d3cb5668ee.jpg" width="375" height="500" alt="ethernet jack for breadboard" /></a><br />
<br />
<br />
mbedにはHTTPClientというDNSやDHCPやHTTPを適当に解決してくれるモジュールがある。<br />
ほぼ<a href="http://mbed.org/projects/cookbook/wiki/EMAC/HTTPClient">mbed EMAC/HTTPClient</a>のまま動いた。<br />
HTTPClientを使うために、<br />
<pre>http://mbed.org/projects/cookbook/svn/EMAC/lwip/trunk</pre>
をprojectにimportする必要があった。mbedのエディタのGUIからimportできた。<br />
<br />
<a href="http://mbed.org/users/shokai/programs/tweet_test/60e2s/">tweet_test | mbed</a><br />
<pre class="prettyprint">
#include&nbsp;"mbed.h"<br />
#include&nbsp;"HTTPClient.h"<br />
using&nbsp;namespace&nbsp;std;<br />
<br />
DigitalOut&nbsp;led(LED1);<br />
<br />
HTTPClient&nbsp;http;&nbsp;//&nbsp;use&nbsp;DHCP<br />
<br />
/*&nbsp;//&nbsp;use&nbsp;static&nbsp;IP<br />
HTTPClient&nbsp;http("mbed",&nbsp;//&nbsp;hostname.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPv4(192,168,1,39),&nbsp;//&nbsp;IPv4&nbsp;address<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPv4(255,255,255,0),&nbsp;//&nbsp;netmask<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPv4(192,168,1,1),&nbsp;//&nbsp;default&nbsp;gateway<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPv4(192,168,1,1));&nbsp;//&nbsp;dns&nbsp;server<br />
/**/<br />
<br />
const&nbsp;char&nbsp;msg[]&nbsp;=&nbsp;"status=mbed&nbsp;test";<br />
<br />
int&nbsp;main(void)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;http.auth("username",&nbsp;"password");<br />
&nbsp;&nbsp;&nbsp;&nbsp;http.post("http://twitter.com/statuses/update.xml",&nbsp;msg);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while(1)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led&nbsp;=&nbsp;!led;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(0.2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</pre>
twitter APIにbasic認証を通って<a href="http://twitter.com/shokai/status/12496686942">http-postし</a>、成功するとLED点滅のループに入る。<br />
<br />
twitter APIは同じtweetを連続で受け取らないようになっているので、このプログラムだと一度tweetした後はmsgを別の文字列に変えないと再確認できない。後ろに乱数とか時刻とかをつける必要がある。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/5122/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailsにFlashからpostしたり取り出したりする</title>
		<link>http://shokai.org/blog/archives/1509</link>
		<comments>http://shokai.org/blog/archives/1509#comments</comments>
		<pubDate>Fri, 28 Mar 2008 23:56:13 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1509</guid>
		<description><![CDATA[Railsのscaffoldでさくっと作ったインタフェースって、HTTP-POSTからSQLに保存したり取り出したりもできて色々プロトタイプを作るのに便利なのでまとめておく。 ためたデータの管理もできるし。 ■Rails [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>Railsのscaffoldでさくっと作ったインタフェースって、HTTP-POSTからSQLに保存したり取り出したりもできて色々プロトタイプを作るのに便利なのでまとめておく。<br /><br />
ためたデータの管理もできるし。</p>
<p>■Rails側の準備<br /><br />
まずrailsを入れる。<br /><br />
Macの人は既に入っているはず。Windowsなら、ActiveScriptRubyを入れてパス通すと、gemコマンドが入るのでgem install railsすればrailsコマンドが使えるようになる。DBは<a href="http://www.sqlite.org/download.html">SQLiteのdll版</a>をc:\windows\system32に入れればできる様になるはず。</p>
<p>railsでtestbbsというプロジェクトを作って、そこにscaffoldでentry(投稿)というmodelを作る。entryには、name（投稿者）とmessage（本文）が入る。</p>
</p>
<blockquote><p><p>rails testbbs<br /><br />
cd testbbs<br /><br />
ruby script/generate scaffold entry name:string message:text<br /><br />
rake db:migrate</p></p></blockquote>
<p>
<p>（単数形に注意）</p>
<p>webサーバーを立ち上げる</p>
</p>
<blockquote><p><p>ruby script/server</p></p></blockquote>
<p>
<p><a href="http://localhost:3000/entries">http://localhost:3000/entries</a>から見れるようになっている。はず。（複数形に注意）</p>
<p>こんなページができている。ここからentryを増やしたり消したりもできる。<br /><br />
<a href="http://www.flickr.com/photos/shokai/2369280169/" title="post from flash to rails by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2099/2369280169_c2465cd6e0_o.png" width="377" height="228" alt="post from flash to rails" /></a></p>
<p>ここまでで、<a href="http://localhost:3000/entries/new">http://localhost:3000/entries/new</a>から投稿できるのと、<a href="http://localhost:3000/entries.xml">http://localhost:3000/entries.xml</a>から一覧を取得できるようになった。</p>
<p>→<a href="http://shokai.org/archive/ruby/rails/0803_testbbs/">Source Code (Ruby on Rails 2.0.2)</a></p>
<p>■Flashから投稿する<br /><br />
HTTP POSTで行う。</p>
<p>今回作ったもの（動きます）<br /><br />
<object width="410" height="200"><param name="movie" value="http://shokai.org/archive/as3/0803_HTTP/HttpPost.swf"></param><embed src="http://shokai.org/archive/as3/0803_HTTP/HttpPost.swf" type="application/x-shockwave-flash" width="410" height="200"></embed></object></p>
<p><a href="http://shokai.org/archive/as3/0803_HTTP/">Source Code (AS3 / Flash CS3 + Flashdevelop)</a><br /><br />
今回もFlashDevelop上でAS3書いて、FlashCS3オーサリング/コンパイルした。</p>
<p>こいつでPOSTすると、<a href="http://localhost:3000/entries">http://localhost:3000/entries</a>に結果が出るようになる。<br /><br />
<a href="http://www.flickr.com/photos/shokai/2369259181/" title="post from flash to rails by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2238/2369259181_201a21aaba_o.png" width="368" height="298" alt="post from flash to rails" /></a></p>
<p>どうやってるかというとまず<br /><br />
<a href="http://localhost:3000/entries/new">http://localhost:3000/entries/new</a>を見ると</p>
</p>
<blockquote><p><p><formaction="/entries"class="new_entry"id="new_entry"method="post"><divstyle="margin:0;padding:0"><inputname="authenticity_token"type="hidden"value="a360f92a6a91d6c588d319f1ab475e9abbb22d9d"/></div>
<p>
<b>Name</b><br/>
<inputid="entry_name"name="entry[name]"size="30"type="text"/>
</p></p>
<p><p>
<b>Message</b><br/></p>
<p><textareacols="40"id="entry_message"name="entry[message]"rows="20"></textarea>
</p></p>
<p><p>
<inputid="entry_submit"name="commit"type="submit"value="Create"/>
</p>
</form>
</p></p></blockquote>
<p>
<p>という風にPOSTしているので、entry[name]とentry[message]をパラメータで渡せばいいとわかる。</p>
<p><span id="more-1509"></span><br /><br />
AS3でhttp postする</p>
<p><a href="http://shokai.org/archive/as3/0803_HTTP/HttpPost.as">HttpPost.as</a><br /><br />
</p>
<blockquote><p>varparams:URLVariables=newURLVariables();<br /><br />
params.decode(&#8220;entry[name]=&#8221;+_textInputName.text);<br /><br />
params.decode(&#8220;entry[message]=&#8221;+_textAreaPost.text);</p>
<p>varrequest:URLRequest=newURLRequest(&#8220;http://localhost:3000/entries&#8221;);<br /><br />
request.method=URLRequestMethod.POST;<br /><br />
request.data=params;<br /><br />
varurlLoader:URLLoader=newURLLoader();<br /><br />
urlLoader.dataFormat=URLLoaderDataFormat.VARIABLES;</p>
<p>urlLoader.load(request);</p></p></blockquote>
<p>
<p>（Railsの複数形・単数形の変化は注意）<br /><br />
。</p>
<p>返り値を受け取るには、<br /><br />
関数を宣言して<br /><br />
</p>
<blockquote><p>publicfunctiononPostComplete(e:Event):void{<br /><br />
varparams:URLVariables=newURLVariables(e.target.data);<br /><br />
trace(&#8220;received:&#8221;+unescape(params.toString()));<br /><br />
}</p></p></blockquote>
<p>
<p>関数をURLLoaderのインスタンスに登録しておけばいい</p>
</p>
<blockquote><p><p>urlLoader.addEventListener(Event.COMPLETE,onPostComplete);//post完了イベントに関数登録</p></p></blockquote>
<p>
<p>今回帰ってきた値。HTMLだ。<br /><br />
</p>
<blockquote><p>postfromflash<br /><br />
received:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"<br /><br />
&#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;></p>
<p><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"lang="en"><br /><br />
<head><br /><br />
<metahttp-equiv="content-type"content="text/html;charset=UTF-8"/><br /><br />
<br /><br />
<linkhref="/stylesheets/scaffold.css?1206748225"media="screen"rel="stylesheet"type="text/css"/><br />
</head><br /><br />
<body></p>
<p><pstyle="color:green">Entrywassuccessfullycreated.</p></p>
<p><p><br />
<b>Name:</b><br /><br />
shokai<br /><br />
</p></p>
<p><p><br />
<b>Message:</b><br /><br />
postfromflash<br /><br />
</p></p>
<p><ahref="/entries/2/edit">Edit</a>|<br /><br />
<ahref="/entries">Back</a></p>
<p></body><br /><br />
</html><br />
</p></p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1509/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

