<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<title>PUBLICROOTS | mtFlash</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/" />
<modified>2012-04-12T10:07:34Z</modified>
<tagline></tagline>
<id>tag:www.publicroots.com,2012:/fmt//6</id>
<generator url="http://www.movabletype.org/" version="3.151-ja">Movable Type</generator>
<copyright>Copyright (c) 2012, publicroots</copyright>
<entry>
<title>Chromeの音声入力 x-webkit-speech</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000368.html" />
<modified>2012-04-12T10:07:34Z</modified>
<issued>2012-04-11T10:11:19Z</issued>
<id>tag:www.publicroots.com,2012:/fmt//6.368</id>
<created>2012-04-11T10:11:19Z</created>
<summary type="text/plain">Chromeの音声入力を実際にちょっと触ってみたのでメモ。 html x-web...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>html5</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>Chromeの音声入力を実際にちょっと触ってみたのでメモ。</p>

<p><em>html</em><br />
x-webkit-speech属性を使う。<br />
<pre><br />
〜<br />
＜body＞<br />
＜input type="text" id="utterance" x-webkit-speech /＞<br />
＜textarea id="results" style="width:400px;height:200px;"＞＜/textarea＞<br />
</body＞<br />
〜<br />
</pre></p>

<p><br />
<em>Javascript</em><br />
onwebkitspeechchangeイベントでハンドリングして、<br />
this.valueで文字情報を取得する。<br />
<pre><br />
$(document).ready(function(){<br />
　/*音声認識処理*/<br />
　var voicesharp = document.getElementById("utterance");<br />
　voicesharp.addEventListener('webkitspeechchange',input_change,false);<br />
});<br />
/*音声認識処理*/<br />
function input_change(e)<br />
{<br />
　var inputText = this.value;<br />
　console.log('event:' + inputText);<br />
　//alert(inputText);<br />
　<br />
　if (inputText.match(/テスト/)) {<br />
　　task01(inputText);<br />
　} else {<br />
　　task02(inputText);<br />
　}<br />
}<br />
function task01(_oktxt) {<br />
　//alert("task01");<br />
　console.log("action start");<br />
　$("#results").val(_oktxt);<br />
};	<br />
function task02(_errtxt) {<br />
　//alert("task02");<br />
　console.log("no action");<br />
　$("#results").val(_errtxt);<br />
};<br />
</pre></p>

<p>詳細はこちらから<br />
<a href="http://earlgreyx.wordpress.com/2011/05/03/html-speech-input-on-google-chrome/" target="_blank">http://earlgreyx.wordpress.com/2011/05/03/html-speech-input-on-google-chrome/</a></p>]]>

</content>
</entry>
<entry>
<title>Chromeの音声入力</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000367.html" />
<modified>2012-04-11T08:10:56Z</modified>
<issued>2012-04-11T08:02:44Z</issued>
<id>tag:www.publicroots.com,2012:/fmt//6.367</id>
<created>2012-04-11T08:02:44Z</created>
<summary type="text/plain">HTML5のx-webkit-speechを使ったChromeの音声入力で 面白...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>html5</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>HTML5の<em>x-webkit-speech</em>を使ったChromeの音声入力で<br />
面白いサンプルを見つけたのでメモ。</p>

<p><em>＜input type="text" x-webkit-speech /＞</em></p>

<p><a href="http://slides.html5rocks.com/#speech-input" target="_blank">http://slides.html5rocks.com/#speech-input</a></p>

<p><script type="text/javascript" src="http://jsdo.it/blogparts/dj6C/js?view=design"></script><p class="ttlBpJsdoit" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://jsdo.it/pypupypa/raputa" title="滅びの呪文（Chrome＆マイク付きPCでやってね）">滅びの呪文（Chrome＆マイク付きPCでやってね） - jsdo.it - share JavaScript, HTML5 and CSS</a></p><br />
</p>]]>
<![CDATA[<p>上級編もあるようです。</p>

<p><script type="text/javascript" src="http://jsdo.it/blogparts/xp4P/js?view=design"></script><p class="ttlBpJsdoit" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://jsdo.it/pypupypa/raputa2" title="ラピュタ上級編（chrome＆マイク付きPCでやってね！）">ラピュタ上級編（chrome＆マイク付きPCでやってね！） - jsdo.it - share JavaScript, HTML5 and CSS</a></p><br />
</p>]]>
</content>
</entry>
<entry>
<title>jQuery Mobile</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000366.html" />
<modified>2012-04-06T09:52:02Z</modified>
<issued>2012-04-06T09:46:35Z</issued>
<id>tag:www.publicroots.com,2012:/fmt//6.366</id>
<created>2012-04-06T09:46:35Z</created>
<summary type="text/plain">どうやらGALAXY系のスマホに対応していないようなのでメモ。 普通のjQuer...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>JavaScript</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>どうやらGALAXY系のスマホに対応していないようなのでメモ。<br />
普通のjQueryは問題ないようです。</p>

<p><em>jQuery Mobile</em><br />
<a href="http://jquerymobile.com/" target="_blank">http://jquerymobile.com/</a><br />
</p>]]>

</content>
</entry>
<entry>
<title>JSONとは</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000365.html" />
<modified>2012-04-06T09:21:22Z</modified>
<issued>2012-04-06T08:59:53Z</issued>
<id>tag:www.publicroots.com,2012:/fmt//6.365</id>
<created>2012-04-06T08:59:53Z</created>
<summary type="text/plain">JSONとはJavaScript Object Notationの略で、テキスト...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>JavaScript</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>JSONとはJavaScript Object Notationの略で、テキストベースのデータフォーマットです。<br />
JavaScriptとの親和性の高さから現在ではAjaxでのデータ交換フォーマットとして広く利用されています。</p>

<p><em>XMLでの表記</em><br />
<pre>＜?xml version="1.0" encoding="utf-8"?＞<br />
＜data＞<br />
　＜selection＞<br />
　　＜ukey＞××××＜/ukey＞<br />
　　＜name＞NAME＜/name＞<br />
　＜/selection＞<br />
＜/data＞<br />
</pre></p>

<p><em>JSONでの表記</em><br />
<pre>{<br />
 "selection" :<br />
　[<br />
　　{<br />
　　　"ukey" : "××××",<br />
　　　"name" : "NAME",<br />
　　}<br />
　]<br />
}<br />
</pre><br />
<br /><br />
<em>jQuery.ajax()で読み込む方法</em><br />
<pre>/*JSON読み込み*/<br />
jQuery.ajax({<br />
　url : 'data.json',<br />
　dataType : 'json',<br />
　success: handleSuccess, <br />
　error: handleError, <br />
　complete: handleComplete <br />
});<br />
〜<br />
/*JSON読み込んだ後の処理*/<br />
/*Ajax通信成功時の処理*/<br />
function handleSuccess(data, dataType)<br />
{<br />
　//alert("Success");<br />
　var texts = data.text;<br />
　$("#jsonarea").html(texts[0]);//内容表示<br />
}<br />
/*Ajax通信失敗時の処理*/<br />
function handleError(XMLHttpRequest, textStatus, errorThrown) {<br />
　//alert("Error");<br />
}<br />
/*Ajax通信終了時の処理 → エラーがあってもコンプリートされる*/<br />
function handleComplete(XMLHttpRequest, textStatus) {<br />
　//alert("Complete");<br />
}<br />
</pre></p>]]>

</content>
</entry>
<entry>
<title>Facebookのプロフィール写真について</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000364.html" />
<modified>2012-03-29T12:50:01Z</modified>
<issued>2012-03-29T12:42:19Z</issued>
<id>tag:www.publicroots.com,2012:/fmt//6.364</id>
<created>2012-03-29T12:42:19Z</created>
<summary type="text/plain">Facebookのプロフィール写真に関するメモ。 Facebookはtwitte...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>Facebook</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>Facebookのプロフィール写真に関するメモ。</p>

<p>Facebookはtwitterやmixiのようにプロフィール写真を変更するAPIが存在しないので、<br />
ユーザー自身に変更してもら必要がありました。</p>

<p>ただ、これを上手に使っているキャンペーンサイトを発見しましたのでメモ。</p>

<p>流れとしては、APIで画像をアルバムに追加して、<br />
「プロフィール写真にする」編集ページにリンクを貼る感じ。</p>

<p>そのサイトは下記になります。<br />
<em>Mr.MINTIA FANCLUB</em><br />
本田圭佑氏扮するMr.MINTIAのファンクラブサイト。<br />
MP3プレーヤーやサングラスなどが当たるキャンペーン実施中です。<br />
<a href="http://www.mintia.jp/" target="_blank">http://www.mintia.jp/</a></p>]]>

</content>
</entry>
<entry>
<title>Facebookページのアプリのサムネイル画像のサイズについて</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000363.html" />
<modified>2012-03-29T12:50:47Z</modified>
<issued>2012-03-29T12:34:51Z</issued>
<id>tag:www.publicroots.com,2012:/fmt//6.363</id>
<created>2012-03-29T12:34:51Z</created>
<summary type="text/plain">Facebookページのアプリのサムネイル画像のサイズについてメモ。 今までのや...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>Facebook</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>Facebookページのアプリのサムネイル画像のサイズについてメモ。</p>

<p>今までのやり方では、どうしても左右が切れてしまうか縮小されてしまいます。<br />
変更する方法としては下記です。<br />
「facebookページを編集」→「アプリ」→変更したいアプリの「設定を編集」→カスタムタブの画像の「変更」→画像をアップロード<br />
※サムネイルのサイズは117＊74</p>

<p>というか久しぶりの投稿だな。。。</p>]]>

</content>
</entry>
<entry>
<title>Facebookでのプロモーションについて</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000358.html" />
<modified>2011-10-04T08:11:29Z</modified>
<issued>2011-10-04T07:47:19Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.358</id>
<created>2011-10-04T07:47:19Z</created>
<summary type="text/plain">下記サイトに詳しく書かれているので確認しておいた方がいいね。 Facebookプ...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>Facebook</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>下記サイトに詳しく書かれているので確認しておいた方がいいね。</p>

<p><b>Facebookプロモーションであなたが知っておくべきこと。</b><br />
<a href="http://socialmedia360.jp/overseas/facebook-promotions-what-you-need-to-know.html" target="_blank">http://socialmedia360.jp/overseas/facebook-promotions-what-you-need-to-know.html</a></p>

<p><i>（引用）<br />
Facebookの機能をプロモーションに使ってはいけない。Facebook上でコンテストを運営する際には、Facebookのプラットフォーム上でサードパーティアプリケーションを用いなければなりません。</p>

<p>なので、ファンの中からランダムに選んで賞品を授与することもできません。（Facebookの機能を使って抽選をして受賞者を選んだことになってしまうので）<br />
Facebookの内部で（eメール、チャット、ウォールへの投稿によって）受賞者とコンタクトを取ることは許されていないのです。<br />
自分のページ のウォールに受賞者を投稿するのも禁止です。</p>

<p>Facebook上で、受賞者の選抜を含むキャンペーンをする場合には、つねにFacebookのプロモーションガイドラインの適用対象となります。<br />
</i></p>

<p><b>プロモーションガイドライン</b><br />
<a href="http://www.facebook.com/promotions_guidelines.php" target="_blank">http://www.facebook.com/promotions_guidelines.php</a></p>

<p><br />
コンテストを運営するのにベストなアプリケーションには下記があります。<br />
かなりの格安でできます。<br />
<em>Wildfireapp</em><br />
<a href="http://www.wildfireapp.com/" target="_blank">http://www.wildfireapp.com/</a><br />
<em>モニプラ</em><br />
<a href="http://monipla.jp/" target="_blank">http://monipla.jp/</a></p>]]>

</content>
</entry>
<entry>
<title>AS3 : テキストを一文字ずつ表示</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000354.html" />
<modified>2011-07-05T10:29:25Z</modified>
<issued>2011-07-05T10:22:22Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.354</id>
<created>2011-07-05T10:22:22Z</created>
<summary type="text/plain">Tweenerで簡単にテキストを一文字ずつ表示できるみたいなのでメモ。 pack...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>Tween</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>Tweenerで簡単にテキストを一文字ずつ表示できるみたいなのでメモ。</p>

<pre>
package {<br>
　import flash.display.Sprite;<br>
　import caurina.transitions.Tweener;<br>
　import caurina.transitions.properties.TextShortcuts;<br>
　<br>
　TextShortcuts.init(); //テキストショートカットを初期化<br>
　<br>
　public class Main extends Sprite {<br>
　　public function Main() {<br>
　　　var sample_text:String = "Tweenerで簡単にテキストを一文字ずつ表示";<br>
　　　//2秒間<br>
　　　Tweener.addTween(text_field, {time:2, _text:sample_text, transition:"linear"});<br>
　　}<br>
　}<br>
}
</pre>

<p>こりゃあ簡単だ。</p>

<p>参考サイトはこちら<br />
<a href="http://www.almondlab.jp/notes/432" target="_blank">http://www.almondlab.jp/notes/432</a><br />
</p>]]>

</content>
</entry>
<entry>
<title>AS3 : TextField フォーカスイベント</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000353.html" />
<modified>2011-07-01T11:35:40Z</modified>
<issued>2011-07-01T11:20:20Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.353</id>
<created>2011-07-01T11:20:20Z</created>
<summary type="text/plain">テキストエリアがフォーカス（選択）されたか、されてないかの判定。 フォーカスされ...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>AS3</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>テキストエリアがフォーカス（選択）されたか、されてないかの判定。</p>

<p>フォーカスされた時<br />
<em>FocusEvent.FOCUS_IN</em><br />
フォーカスが外れた時<br />
<em>FocusEvent.FOCUS_OUT</em></p>

<pre>
stage.addEventListener(FocusEvent.FOCUS_IN,focusIn);<br>
stage.addEventListener(FocusEvent.FOCUS_OUT,focusOut);<br>
〜<br>
private function focusIn(e:FocusEvent):void {<br>
　trace("focusIn");<br>
}<br>
private function focusOut(e:FocusEvent):void {<br>
　trace("focusOut");<br>
}
</pre>

<p>参考サイトはこちら<br />
<a href="http://moire69.sakura.ne.jp/ac/?p=222" target="_blank">http://moire69.sakura.ne.jp/ac/?p=222</a><br />
</p>]]>

</content>
</entry>
<entry>
<title>Facebook/twitterのアプリ解除</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000350.html" />
<modified>2011-07-01T10:35:03Z</modified>
<issued>2011-05-26T11:28:31Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.350</id>
<created>2011-05-26T11:28:31Z</created>
<summary type="text/plain">Facebook/twitterのアプリを解除する方法ですが、すぐに忘れるのでメ...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>Facebook</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>Facebook/twitterのアプリを解除する方法ですが、すぐに忘れるのでメモります。</p>

<p>それぞれ下記ページから解除できます。<br />
<em>facebook</em><br />
<a href="http://www.facebook.com/settings/?tab=applications#!/settings/?tab=applications" target="_blank">http://www.facebook.com/settings/?tab=applications#!/settings/?tab=applications</a><br />
<em>twitter</em><br />
<a href="http://twitter.com/settings/applications" target="_blank">http://twitter.com/settings/applications</a></p>

<p><br />
ちなみにプロフィール画像のサイズは下記です。<br />
<em>Facebook</em><br />
・square ・・・ 50 * 50px (デフォルト)<br />
・small ・・・ 幅 50px で縦は比率を保った長さ<br />
・normal ・・・ 幅 100px で縦は比率を保った長さ<br />
・large ・・・ アップロードしたオリジナル画像<br />
<em>twitter</em><br />
・mini ・・・ 24  * 24px<br />
・normal ・・・ 48 * 48px<br />
・bigger ・・・ 73 * 73px<br />
・reasonably_small ・・・ 128 * 128px<br />
</p>]]>

</content>
</entry>
<entry>
<title>Facebookの「いいね！」ボタンを押した時のサムネイル画像</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000348.html" />
<modified>2011-09-21T23:56:37Z</modified>
<issued>2011-05-08T17:07:26Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.348</id>
<created>2011-05-08T17:07:26Z</created>
<summary type="text/plain">Facebookの「いいね！」ボタンを押した時のサムネイル画像の指定の仕方って簡...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>Facebook</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>Facebookの「いいね！」ボタンを押した時のサムネイル画像の指定の仕方って簡単にできるみたい。</p>

<p><em>&lt;meta property="og:image" content="image_url"/&gt;</em></p>

<p>これを追加すればOKです。<br />
画像はpng、jpg、gifが指定可能で、サイズは50x50px以上<br />
画角は最大3:1まで推奨のようです。<br />
設置はhead内</p>

<p>「URLリンター」ページよりチェックができます。<br />
<a href="http://developers.facebook.com/tools/lint/" target="_blank">http://developers.facebook.com/tools/lint/</a></p>

<p>参考サイトはこちら<br />
<a href="http://ameblo.jp/senkodou/entry-10870730936.html" target="_blank">http://ameblo.jp/senkodou/entry-10870730936.html</a><br />
<a href="http://design.kayac.com/topics/2010/10/meta-facebook.php" target="_blank">http://design.kayac.com/topics/2010/10/meta-facebook.php</a></p>]]>
<![CDATA[<p>【追記20110701】<br />
ちなみに画像付きの「いいね」を同じページ内で展開することはできない。<br />
元ページの画像を引っ張ってくるので。</p>

<p>【追記20110720】<br />
また、ページに紐付いた「いいね」でないと、自分のウェールには反映されるけど、<br />
ニュースフィードには反映されないらしい・・・これFacebookの仕様？？</p>

<p>【追記20110901】<br />
facebookのキャッシュをクリアしたい時は、下記にURLを入力すれば、<br />
Facebookのクローラーが最新情報をキャッシュし直してくれます。<br />
<a href="http://developers.facebook.com/tools/debug" target="_blank">http://developers.facebook.com/tools/debug</a></p>

<p><br />
【追記20110922】<br />
Facebookアプリの仕様が2011年10月1日から変更されるようですね。<br />
・FacebookアプリやFacebookページはSSL認証へ<br />
・OAuth 2.0への移行<br />
<a href="http://www.h-fj.com/blog/archives/2011/09/14-122337.php" target="_blank">http://www.h-fj.com/blog/archives/2011/09/14-122337.php</a></p>

<p></p>

<p><br />
</p>]]>
</content>
</entry>
<entry>
<title>twitter bot</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000345.html" />
<modified>2011-04-26T10:15:46Z</modified>
<issued>2011-04-20T05:58:18Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.345</id>
<created>2011-04-20T05:58:18Z</created>
<summary type="text/plain">下記の参考サイトを元に簡単なbotを作ってみました。 http://plus-l...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>php</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>下記の参考サイトを元に簡単なbotを作ってみました。<br />
<a href="http://plus-lab-style.asia/archives/919" target="_blank">http://plus-lab-style.asia/archives/919</a></p>

<p><br />
1. twitterにOAuthの認証に使用するアカウント(OAuthでtwitterを利用するbotまたはWebアプリのアカウント）で<br />
ログイン済みの状態にした上で、アプリケーションの登録を行います。<br />
<a href="http://twitter.com/oauth_clients" target="_blank">http://twitter.com/oauth_clients</a></p>

<p>そこで取得した<em>Consumer key</em>と<em>Consumer secret</em>の2つの値を使います。</p>

<p><br />
2. 下記サイトよりバージョン2.0以上のファイルをダウンロードして下さい。<br />
<a href="https://github.com/abraham/twitteroauth" target="_blank">https://github.com/abraham/twitteroauth</a></p>

<p>この中の<em>OAuth.php</em>と<em>twitteroauth.php</em>を使います。</p>

<p><br />
3. 下記の情報をファイル名を「oauth_test.php」で同じ階層に保存します。<br />
<a href="http://www.sdn-project.net/labo/oauth_test.txt" target="_blank">http://www.sdn-project.net/labo/oauth_test.txt</a></p>

<p>Consumer keyConsumer secretの2つの値を入れておきます。<br />
これまでのファイルをサーバーにアップして「oauth_test.php」にアクセスして、OAuthの認証作業を行います。<br />
アカウント認証ページが現れるので、「許可する」をクリックします。<br />
すると、<em>Access Token</em>と<em>Access Token Secret</em>に値が入力された状態になっています。</p>

<p><br />
4. あとは、先程取得した値をいれて下記のphpファイルを作成すれば完成です。<br />
<em>Consumer key</em>、<em>Consumer secret</em>、<em>Access Token</em>、<em>Access Token Secret</em>の値をいれます。</p>

<p><em>index.php</em><br />
<pre><br />
<?<br />
require_once(“twitteroauth.php”);<br />
//下の4つの変数に、実際の値を記述して下さい。<br />
$consumer_key = “Consumer keyの値”;<br />
$consumer_secret = “Consumer secretの値”;<br />
$access_token = “Access Tokenの値”;<br />
$access_token_secret = “Access Token Secretの値”;</p>

<p>// メッセージ<br />
//$message = "tweet sample1"; </p>

<p>// OAuthオブジェクト生成<br />
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);</p>

<p>// TwitterへPOSTする<br />
$req = $to->OAuthRequest(“https://twitter.com/statuses/update.xml”,”POST”,array(“status”=>”Test OAuth update.”));<br />
header(“Content-Type: application/xml”);<br />
echo $req;<br />
?><br />
</pre></p>

<p>これで一式をサーバーにアップして、index.phpにアクセスすれば、<br />
該当のtwitterアカウントにtweetされます。<br />
</p>]]>
<![CDATA[<p>【追記】<br />
tweetの内容をテキストファイルからランダムで書き出すようにもできます。</p>

<p>先程のindex.phpファイルの<em>$message</em>部分を下記に変更すれば大丈夫です。<br />
<pre><br />
〜<br />
//txtファイルの内容を、配列に格納<br />
$tw_array = file("tweet.txt");</p>

<p>//メッセージをランダムに投稿するキーを作成<br />
$key = array_rand($tw_array,1);</p>

<p>//投稿用メッセージの作成<br />
$twe = $tw_array[$key];//配列から投稿するメッセージを読み込む<br />
$twe = trim($twe);//メッセージの前後から空白を除去<br />
$twe = preg_replace("@\n+@","\n",$twe);<br />
$twe = explode("\n", $twe);<br />
$message = $tw_array[$key];<br />
〜<br />
</pre></p>

<p><em>tweet.txt</em><br />
<pre><br />
tweet sample1<br />
tweet sample2<br />
tweet sample3<br />
・・・<br />
</pre></p>

<p>【追記20110426】<br />
また定期的につぶやくにはCRONを使います。<br />
下記のサイトに登録して設定すればいけるようです。<br />
※日本からのアクセスは制限されているようでかなり不安定です。<br />
<a href="http://www.cron-job.org/cgi-bin/cronweb" target="_blank">http://www.cron-job.org/cgi-bin/cronweb</a></p>

<p>設定の方法<br />
<a href="http://drupal.jp/guide/cron_task_cron-job_org" target="_blank">http://drupal.jp/guide/cron_task_cron-job_org</a></p>

<p>CRON（クーロン）とは<br />
<a href="http://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html" target="_blank">http://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html</a></p>

<p><br />
</p>]]>
</content>
</entry>
<entry>
<title>Googleストリートビュー+Flash</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000342.html" />
<modified>2011-04-04T13:12:53Z</modified>
<issued>2011-03-31T07:58:58Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.342</id>
<created>2011-03-31T07:58:58Z</created>
<summary type="text/plain">GoogleストリートビューとFlashの連携って意外に簡単なんですね。 Tim...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>GoogleMap</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>GoogleストリートビューとFlashの連携って意外に簡単なんですね。</p>

<p>Timerを使って、配列に格納した緯度、経度へ<br />
マップのマーカーとストリートビューを移動させます。</p>

<p>ストリートビューを移動させるのは、ExternalInterface.callでJSと連携するらしいです。</p>

<p>参考サイトはここ<br />
<a href="http://blog.alt-scape.com/archives/246" target="_blank">http://blog.alt-scape.com/archives/246</a></p>

<p><br />
【追記_20110404】<br />
アプリケーションでセンサー（GPS など）を使用しているかどうかを指定するものとして、<br />
センサーのパラメータが追加になってますね。<br />
<em>map.sensor = "false";</em><br />
または<br />
<em>yourkey&sensor=true_or_false</em></p>

<p>デベロッパー ガイドを参照ください。<br />
<a href="http://code.google.com/intl/ja/apis/maps/documentation/premier/guide.html#Sensor" target="_blank">http://code.google.com/intl/ja/apis/maps/documentation/premier/guide.html#Sensor</a><br />
</p>]]>

</content>
</entry>
<entry>
<title>AS3 : 画像のアップロード</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000339.html" />
<modified>2011-01-25T12:57:33Z</modified>
<issued>2011-01-24T05:12:22Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.339</id>
<created>2011-01-24T05:12:22Z</created>
<summary type="text/plain">ローカルから画像ファイルをアップロードする方法。 間違いやすい点として戻り値は ...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>AS3</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>ローカルから画像ファイルをアップロードする方法。</p>

<p>間違いやすい点として戻り値は<br />
<em>Event.COMPLETE</em> ではなくて、<br />
<em>DataEvent.UPLOAD_COMPLETE_DATA</em> より取得する。</p>

<p>JPGEncoderのライブラリーは<a href="http://www.publicroots.com/download/adobe.zip">こちら</a>から一式DLください。</p>

<pre>
〜<br />
import com.adobe.images.JPGEncoder;<br />
import flash.utils.ByteArray;<br />
import jp.psyark.net.MultipartFormDataBuilder;<br />
〜<br />
private function SelectAction():void<br />
{<br />
　//セレクト<br />
　fileRef = new FileReference();<br />
　fileRef.addEventListener( Event.SELECT, onSelectFile );<br />
　var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg");<br />
　fileRef.browse([imagesFilter]);<br />
}<br />
private function onSelectFile( e:Event ):void<br />
{<br />
　fileRef.removeEventListener( Event.SELECT, onSelectFile );<br />
　if(fileRef.size <= 5000000){//5M以下の場合<br />
　　fileRef.addEventListener(Event.COMPLETE, onFileLoaded);<br />
　　fileRef.addEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);<br />
　　fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress);<br />
　　fileRef.load();<br />
　}<br />
}<br />
//onFileLoadError<br />
private function onFileLoadError(event:Event):void<br />
{<br />
　fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);<br />
　fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);<br />
　fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);<br />
　trace("File load error");<br />
}<br />
//onProgress<br />
private function onProgress(event:ProgressEvent):void<br />
{<br />
　var percentLoaded:Number=event.bytesLoaded/event.bytesTotal*100;<br />
　trace("loaded: "+percentLoaded+"%");<br />
}<br />
//onFileLoaded<br />
private function onFileLoaded(event:Event):void<br />
{<br />
　fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);<br />
　fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);<br />
　fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);<br />
　<br />
　var fileReference:FileReference=event.target as FileReference;<br />
　var data:ByteArray=fileReference["data"];<br />
　trace("File loaded");<br />
　var movieClipLoader:Loader=new Loader();<br />
　movieClipLoader.loadBytes(data);<br />
　<em>movieClipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMCLoaderComplete);</em><br />
}<br />
//onMCLoaderComplete<br />
private function onMCLoaderComplete(event:Event):void<br />
{<br />
　trace("onMovieClipLoaderComplete");<br />
　//BitmapData<br />
　var upppbmp:BitmapData = Bitmap(event.target.content).bitmapData;<br />
　trace("upppbmp = "+upppbmp);<br />
　<br />
　//エンコードする<br />
　<em>var jpegup:JPGEncoder = new JPGEncoder(100);</em><br />
　<em>var byteArrup:ByteArray = jpegup.encode(upppbmp);</em><br />
　<br />
　var selecturl:URLRequest = new URLRequest();<br />
　selecturl.url = _uploaderphp;<br />
　var variables:URLVariables = new URLVariables();<br />
　variables.imgupload = byteArrup;<br />
　selecturl.method = URLRequestMethod.POST;<br />
　selecturl.data = variables;<br />
　<br />
　fileRef.addEventListener(Event.COMPLETE, onUploadData);<br />
　<em>fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadDataHandler);</em><br />
　fileRef.addEventListener(ProgressEvent.PROGRESS, onProgressUP);<br />
　//fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorUP);<br />
　fileRef.upload(selecturl);<br />
}<br />
//===================================================//<br />
//アップロードと同時にXMLを取得する：UPLOAD_COMPLETE_DATA<br />
//===================================================//<br />
private function uploadDataHandler(e:DataEvent):void<br />
{<br />
　fileRef.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadDataHandler);<br />
　//XML取得<br />
　var uploaderXML:XML = new XML( e.data );<br />
　trace("uploaderXML = "+uploaderXML);<br />
}<br />
〜<br />
</pre>]]>
<![CDATA[<p>WEBカメラからのキャプチャーをとる方法は下記です。</p>

<pre>
private function CameraAction():void<br />
{<br />
　camera = Camera.getCamera();<br />	
　if(camera != null){<br />
　　trace("使用可能なカメラあり。");<br />
　　camera.addEventListener(StatusEvent.STATUS, statusHandler);<br />
　　camera.setMode(camera_width, camera_height, 15);<br />
　　camera.setMotionLevel(10);<br />
　　camera.setQuality(0, 50);<br />
<br />
　　video = new Video(camera.width, camera.height);<br />
　　video.attachCamera(camera);<br />
　　_webcamera.addChild(video);<br />
　　video.x = -camera_width/2;<br />
　　video.y = -camera_height/2;<br />
　}else{<br />
　　trace("使用可能なカメラがありません。");<br />
　}<br />
}<br />
//statusHandler<br />
private function statusHandler(evt:StatusEvent):void<br />
{<br />
　trace("camera.muted = "+camera.muted);<br />
　if(camera.muted){<br />
　　trace("カメラへのアクセスが拒否されました。");<br />
　　trace("カメラの映像を表示するにはアクセスを許可してください。");<br />
　　Security.showSettings(SecurityPanel.PRIVACY);<br />
　}else{<br />
　　trace("使用中のカメラ : " + camera.name);<br />
　　trace("幅x高さ : " + camera.width + "x" + camera.width);<br />
　}<br />
}<br />
private function BitmapAction():void<br />
{<br />	
　bdTmp = new BitmapData(camera_width, camera_height);<br />
　bdTmp.draw(video);<br />
<br />
　//エンコードする<br />
　var jpeg:JPGEncoder = new JPGEncoder(100);<br />
　var byteArr:ByteArray = jpeg.encode(bdTmp);<br />
　jpgSend(byteArr);<br />
}<br />
private function jpgSend(ba:ByteArray):void<br />
{<br />
　<em>var builder:MultipartFormDataBuilder = new MultipartFormDataBuilder("247672365515574");</em> //バウンダリは適当<br />
　<em>builder.addPart("imgupload", ba, "geee_webcam.jpg");</em> //JPEGエンコードされたByteArray<br />
<br />
　//POST---imgupload<br />
　var _uploaderphp:String = "sample.php";//アップロードするプログラム先<br />
　JpegRequest = new URLRequest();<br />
　JpegRequest.url = _uploaderphp;<br />
　builder.configure(JpegRequest);<br />
<br />
　JpegLoader = new URLLoader();<br />
　JpegLoader.addEventListener(Event.COMPLETE, ImageSoushin);<br />
　JpegLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHD);<br />
　JpegLoader.load(JpegRequest);<br />
}<br />
private function ioErrorHD(e:IOErrorEvent):void<br />
{<br />
　trace("ioErrorHD");<br />
}<br />
private function ImageSoushin(eventObject:Event):void<br />
{<br />
　trace("ImageSoushin");<br />
　JpegLoader.removeEventListener(Event.COMPLETE, ImageSoushin);<br />
　JpegLoader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHD);<br />
<br />
　//XML取得<br />
　var uploaderXML:XML = new XML( eventObject.target.data );<br />
　trace("uploaderXML = "+uploaderXML);<br />
}<br />
</pre>]]>
</content>
</entry>
<entry>
<title>AS3 : CASA Framework</title>
<link rel="alternate" type="text/html" href="http://www.publicroots.com/fmt/archives/000337.html" />
<modified>2011-01-20T14:25:05Z</modified>
<issued>2011-01-19T09:58:43Z</issued>
<id>tag:www.publicroots.com,2011:/fmt//6.337</id>
<created>2011-01-19T09:58:43Z</created>
<summary type="text/plain">以下よりCASAのAS3ライブラリーをダウンロードします。 http://svn...</summary>
<author>
<name>publicroots</name>
<url>http://www.publicroots.com/</url>
<email>publicroots@gmail.com</email>
</author>
<dc:subject>AS3</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.publicroots.com/fmt/">
<![CDATA[<p>以下よりCASAのAS3ライブラリーをダウンロードします。<br />
<a href="http://svn.as3.casalib.org/dev/" target="_blank">http://svn.as3.casalib.org/dev/</a><br />
めんどくさい人は<a href="http://www.publicroots.com/download/org.zip">こちら</a>から一式DLください。</p>

<pre>
package {<br />
	import flash.display.*;<br />
	import flash.events.*;<br />
	import flash.net.*;<br />
	import flash.utils.*;<br />
	import org.casalib.load.*;<br />
	import org.casalib.events.*;<br />
	<br />
	public class CasaSampleCls<br />
	{<br />
　　　private var _imgURLs:Array = ["data/samp1.jpg", "data/samp2.jpg", "data/samp3.jpg", "data/samp4.jpg", "data/samp5.jpg"];<br />
　　　private var _groupLoad:GroupLoad; <br />
　　　<br />
　　　public function ActionCls():void<br />
　　　{<br />
　　　　//グループロードする<br />
　　　　startLoadGroup();<br />
　　　}<br />
　　　private function startLoadGroup():void<br />
　　　{<br />
　　　　_groupLoad = new GroupLoad();<br />
　　　　_groupLoad.addEventListener(LoadEvent.COMPLETE, onCompleteGroupLoad);<br />
　　　　var len:int = _imgURLs.length;<br />
　　　　for (var i:int = 0; i < len; i++) <br />
　　　　{<br />
　　　　　var imageLoad:ImageLoad = new ImageLoad(_imgURLs[i]);<br />
　　　　　imageLoad.addEventListener(IOErrorEvent.IO_ERROR, onErrorImageLoad);<br />
　　　　　_groupLoad.addLoad(imageLoad);<br />
　　　　}<br />
　　　　//スタート<br />
　　　　_groupLoad.start();<br />
　　　}<br />
　　　private function onErrorImageLoad(e:IOErrorEvent):void<br />
　　　{<br />
　　　　trace("onErrorImageLoad");<br />
　　　　<br />
　　　　var imgs:Array = _groupLoad.completedLoads;  //ロードが成功した画像<br />
　　　　var len:int = imgs.length;<br />
　　　　for (var i = 0; i < len; i++)<br />
　　　　{<br />
　　　　　if (!imgs[i].loaded)<br />
　　　　　{<br />
　　　　　//ロードが失敗した画像のかわりにエラー画像のURLを入れる。<br />
　　　　　_imgURLs[i] = "data/error.jpg";<br />
　　　　}<br />
　　　}<br />
　　　//もう一度グループロードする<br />
　　　startLoadGroup();<br />
　　}<br />
　　private function onCompleteGroupLoad(e:LoadEvent):void<br />
　　{<br />
　　　trace("onCompleteGroupLoad");<br />
　　　<br />
　　　var len:int = _groupLoad.loads.length;<br />
　　　for (var i:int = 0; i < len; i++) <br />
　　　{<br />
　　　　var img:Bitmap = _groupLoad.loads[i].contentAsBitmap;  //ビットマップにキャストする。<br />
　　　　img.smoothing = true;<br />
　　　　img.x = 0;<br />
　　　　img.y = 0;<br />
　　　　addChild(img);<br />
　　　}<br />
　}<br />
}<br />
</pre>

<p>参考サイトはこちら<br />
<a href="http://d.hatena.ne.jp/yoshidam/20100402/1270202619" target="_blank">http://d.hatena.ne.jp/yoshidam/20100402/1270202619 </a><br />
</p>]]>

</content>
</entry>

</feed>
