School is the opposite of fair...riaf
seen from China
seen from Australia
seen from Netherlands

seen from United Kingdom

seen from Indonesia

seen from United States
seen from United States
seen from Hong Kong SAR China
seen from Germany
seen from Netherlands
seen from China
seen from United States

seen from United Kingdom
seen from Italy

seen from United Kingdom

seen from Malaysia
seen from China
seen from United Kingdom
seen from United Kingdom
seen from China
School is the opposite of fair...riaf

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch ⢠No registration required ⢠HD streaming
jquery-tutor ãšãããã©ã°ã€ã³ãäœããŸãã
ãã²ããã¶ãã§ããriaf ã§ãïŒ
仿¥ã¯ãã¡ãã£ãšãã jQuery Plugin ãäœã£ãŠã¿ãã®ã§ãã®ç޹ä»ã§ãã ã¡ãªã¿ã«ããŸã Crocos ã®ãµãŒãã¹ã«ã¯äœ¿çšããŠããªãã®ã§ãã¡ãããšããããªç°å¢ã§åããã©ããã¯ããããŸãã..ã ããããªãšããããã£ãããã²ãã² Pull Request ãããããããŸããïŒïŒèŠãç®ããã£ãè¯ãããŠãããããšãã倧æè¿ã§ãïŒïŒ
äœããããã©ã°ã€ã³ã
ãµã³ãã« ãèŠãŠããã ããã°ã€ããããªãã§ããã ãŠã§ããµãŒãã¹ã®ãã¥ãŒããªã¢ã«ãããã®ãµã€ããå®éã«èŠãªããé²ãããã€ããããããªãã§ããã
ãããããããæ±çšçã«ãªã£ãŠããšããããããªãŒãšæã£ãŠäœã£ãŠã¿ãŸããã Crocos ã«ã¯ Hack Hour ãšããå¶åºŠããããå 鱿«ã® Hack Hour ã§æ°åãé«ãŸã£ãŠäœã£ãŠã¿ãããšããã¬ãã«ã®ç¶æ ã§ãã®ã§ãä»åŸã¡ãããšãããã¯ã·ã§ã³ç°å¢ã§äœ¿ããããã«ããŠè¡ããããšèããŠããŸãïŒHack Hour ã«ã€ããŠã¯ãåŸã»ã©ç޹ä»ããŸãã
äœ¿ãæ¹
jquery-tutor.min.js ãèªã¿èŸŒãã ã
$(function() { $.tutor({ steps: [ { target: '.step-one', message: 'ãŸãã¯ããããã' }, { target: '.step-two', message: '次ã¯ãããã' } ] }); });
ã®ããã«ããŠãæäœã®å¯Ÿè±¡ã«ãªã element ã target ã«æå®ããŠã衚瀺ããã¡ãã»ãŒãžãèšå®ããŸãã Next ãã¿ã³ãæŒãããæ¬¡ã®ã¹ãããã«ç§»åããŸãã
steps ã«æå®ã§ããã®ã¯ element ãæå®ãã object ã ãã§ã¯ãªããäœããã function ãæå®ããããšãã§ããŸãã Deferred Object ã return ãããšãresolve ããããŸã§æ¬¡ã®ã¹ãããã¯å®è¡ãããŸããã
$(function() { $.tutor({ steps: [ function() { alert('Welcome!'); }, function(dfd) { // async FB.api('/me', function(me) { alert(me.name + 'ããã§ãããŒïŒ'); dfd.resolve(); }); return dfd.promise(); } ] }); });
ããŠã³ããŒããªã©
GitHub ã§å ¬éããŠãããŸãã®ã§ãç ®ããªãçŒããªã...ïŒ
crocos/jquery-tutor · GitHub
https://github.com/crocos/jquery-tutor
Hack Hour ã«ã€ããŠ
æ¯é±éææ¥ã® 2 æéãä»äºãšã¯é¢ä¿ããªãïŒãã¡ãããé¢ä¿ããã£ãŠã OKããšããããæè¡çãªããšãªãã ãããé¢ä¿ããŠããŸãããïŒæè¡ã®å匷ãšããéçºãšãïŒããšãã°ã瀟å ã§äœ¿ã£ãŠãã wiki ã·ã¹ãã ã®æ°æ©èœéçºãšãïŒãããæéãèšããããŠããŸãã ãããšæè¿ã¯ã¿ããªå¿ãããŠåå çäœããªãã§ããããããããšã仿¥ã¯ãããªããšãããããªïŒããšå®£èšããŠçµããé ã«ããããŸã§ãã£ããïŒãã¿ãããªå ±æãããŠçµãããŸãã
ãã® Hack Hour ã§ä»èŸŒãã§ãããã¿ãããããããã®ã§ãä»åŸãããã°ãšãã§å ±åããŠããããšãããªãŒãšæã£ãŠãŸãã
Titanium ãš alloy ã§ã¯ãããã¹ããŒããã©ã³ã¢ããªéçº
飿¥ã®ããã°æŽæ°ã«è§ŠçºãããŠä»æ¥ãæžãã¡ãããŸããCrocos ã®äººæ±æ åœãäœè€ (@riaf) ã§ãã
ãšããããã§ãæ¬æ¥ã¯ iPhone ã¢ããªãšã Android ã¢ããªãšãã JavaScript ã§éçºã§ãã¡ããã£ãŠããã¹ãããªãããã¯ã Titanium Mobile ã®ã話ã§ããCrocos ããã°ã®ããã«ã Facebook ã®è©±é¡ã¯ãŸã£ãããããŸããïŒ
ããã㯠Facebook ãšé£æºããã¢ããªã®éçºæ¹æ³ãšããã玹ä»ã§ããã°ãšããããŸããããŸãã¯ãŸã ããŸãæ¥æ¬èªã®æ å ±ããªã alloy ã«ã€ããŠã®ã玹ä»ã§ãïŒ
alloy ãšã¯ïŒ
Titanium Mobile ã®éçºå ã§ãã appcelerator ã GitHub ã§å ¬éããŠãããTitanium åãã® MVC ãã¬ãŒã ã¯ãŒã¯ã§ãã
ãã®èšäºãæžããŠãã 2012幎 7æçŸåšã¯ãUnstable ããŒãžã§ã³ïŒæ¥æ¬èªã«ãããšäžè¬çã«ã¯äžå®å®ããŒãžã§ã³ãšã§ãèšããã§ããããïŒã®ç¶æ ã§ãã®ã§ãStable ãªãªãŒã¹ã®é ã«ã¯ãŸãéããã®ã«ãªã£ãŠãããããããŸããããäººæ±æ åœãšããŠã¯æãåºããŠããã¹ãããšæããŸããŠãalloy ã䜿ã£ãŠ iPhone ã¢ããªãäœã£ãŠã¿ãããšæããŸãã
https://github.com/appcelerator/alloy
ã¢ããªéçºãå§ãã
alloy 㯠Titanium åãã®ãã¬ãŒã ã¯ãŒã¯ã§ãã®ã§ããŸã㯠Titanium SDK ãå¿ èŠã«ãªããŸãã
ä»å㯠Mac ã§éçºãããã®ã§ãTitanium Studio ã® Mac çãããŠã³ããŒãããŸããã
æ©éèµ·åããŠãããžã§ã¯ããäœã£ãŠã¿ãŸããiOS ã¢ããªãäœããšã㯠iOS ã® SDK ããAndroid ã¢ããªãäœããšã㯠Android ã® SDK ã®ã»ããã¢ãããå¿ èŠã§ãããã®ãžãã¯å··ã«å°å ¥æ¹æ³ããããããããŸãã®ã§ããã¡ãã«ãä»»ãããŠãä»å㯠crocos ãšããã¢ããªãäœæããŠã¿ãŸããã
å²ãšé©åœã«ãããªãããã«äœæããŠã¿ãŸããããããããšãæäœéãªã³ãŒããäœãããŠããŸãã
$ ls CHANGELOG.txt LICENSE LICENSE.txt README Resources build manifest tiapp.xml
ããã§ãTitanium ã®æºåã¯å®äºã§ãã
alloy ãã€ã³ã¹ããŒã«ãã
alloy 㯠npm ã§é åžãããŠããã®ã§ãnode ãåäœãããç°å¢ãäœã£ãŠãããšè¯ãã§ããããåã¯ãnodebrewãšããããŒã«ã§ node ã npm ã管çããŠããŸãããšãŠã䟿å©ãªã®ã§ããªã¹ã¹ã¡ã§ãïŒ
ããŠãalloy ã®ã€ã³ã¹ããŒã«ã¯
npm -g install alloy
ãšããã ãã§ããããã§ã alloy ã³ãã³ãã䜿ããããã«ãªããŸãã
$ which alloy /Users/riaf/.nodebrew/current/bin/alloy
alloy ãã»ããã¢ãããã
ããã§ã¯ãå ã»ã©äœæãã Titanium ãããžã§ã¯ãã®ãã£ã¬ã¯ããªã«ç§»åããalloy ãã»ããã¢ããããŸãã
# ãã¡ãããç°å¢ã«ãã£ãŠèªã¿æ¿ããŠäžããã $ cd ~/Documents/Titanium_Studio_Workspace/crocos $ alloy new .
alloy ã®ã»ããã¢ãã㯠alloy new ããã ãã§ãã
# äžã®ç¶ãã§ã $ alloy new . .__ .__ _____ | | | | ____ ___.__. \__ \ | | | | / _ < | | / __ \| |_| |_( <_> )___ | (____ /____/____/\____// ____| \/ \/ Alloy by Appcelerator. The MVC app framework for Titanium. 2012-07-11 23:44:20 -- [DEBUG] Creating directory: plugins 2012-07-11 23:44:20 -- [DEBUG] Creating directory: plugins/ti.alloy 2012-07-11 23:44:20 -- [INFO ] Deployed ti.alloy plugin to plugins/ti.alloy/plugin.py 2012-07-11 23:44:20 -- [INFO ] Installed 'ti.alloy' plugin to tiapp.xml 2012-07-11 23:44:20 -- [INFO ] Generated new project at: app
Generate ã§ããŸããã
ããã§ããšãããã iOS ã·ãã¥ã¬ãŒã¿ãŒã§å®è¡ãããŠã¿ãããšæããŸããããnodebrew çã䜿ã£ãŠããç°å¢ã§ãã®ãŸãŸå®è¡ (Mac ã®å Žå㯠F11 ã«ã·ã§ãŒãã«ãããããããã§ã)ããããšãããšãOSError: [Errno 2] No such file or directory ãšèšãããŠããŸã£ãŠãå®è¡ããããšãã§ããŸããã
ããã¯ãplugins/ti.alloy/plugin.py ã«èšè¿°ãããŠãã node ã alloy ã®ãã¹ã /usr/local/bin ã§æ±ºãæã¡ãããŠããŸã£ãŠãããããªã®ã§ã察象ã®è¡ãä¿®æ£ããå¿ èŠããããŸãã
å ·äœçã«ã¯ä»¥äžã®ããã«æžãããŠãããšããããå®éã« node ã alloy ãååšãããã¹ã«æžãæããŠãããŸãã (çŸåšã¯ 27 è¡ç®ä»è¿)
cmd = ["/usr/local/bin/node","/usr/local/bin/alloy", "compile", f, "--no-colors", "--config", cfg]
ä¿®æ£ããåŸã«ããäžåºŠãã«ããããšã以äžã®æ§ãªç»é¢ãèŠãããšãã§ããŸããããã¹ããã¯ãªãã¯(ã¿ãã)ãããšãã¢ã©ãŒãã衚瀺ãããã ãã®ãµã³ãã«ã§ãã
alloy ã®ãã£ã¬ã¯ããªæ§æ
alloy ã§ã¯ãåºæ¬çã« app ãã£ã¬ã¯ããªã®äžãç·šéããŸãã
äž»ã«ä»¥äžã®ãã¡ã€ã«ãèªããšæ§é ãããããšæããŸãã
app/controllers/index.js
ã³ã³ãããŒã©ãããã¹ããã¯ãªãã¯ããããšãã«ã¢ã©ãŒããçºçãããã³ãŒããæžãããŠããŸãã
$.t.on('click',function(e) { alert($.t.text); }); $.index.open();
app/styles/index.json
ã¹ã¿ã€ã«ãCSS ã®ããã«ãèŠãç®ã«é¢ããããŒã¿(è²ãããµã€ãºãªã©)ãæžãããŠããŸãã
{ ".container": { "backgroundColor":"white" }, "Label": { "width": Ti.UI.SIZE, "height": Ti.UI.SIZE, "color": "#000" } }
app/views/index.xml
ãã¥ãŒãHTML ã®ããã«ãå®éã«é 眮ããèŠçŽ ãæžãããŠããŸãã
<Window class="container"> <Label id="t">Hello, World</Label> </Window>
ãã®ãµã³ãã«ã§ã¯ã¢ãã«ã¯äœ¿ãããŠããªãã®ã§ãMVC ã®åé¢ãšããæå³ã§ã¯ç©è¶³ããªããããããŸãããããã®ããã«ã alloy ã§ã¯ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãéçºããããšããã人ã«ã¯éŠŽæã¿ã®ãããããªãã¡ã€ã«æ§æã§ãã¹ããŒããã©ã³ã¢ããªãéçºããããšãåºæ¥ãããã«ãªããŸãã
ãšã¯ããããŸã ãŸã éçºäžã£ãœããŠãã©ãã©ãã³ããããããŠãããããžã§ã¯ãã§ãã®ã§ãæ¥åã§ã®æŽ»çšã¯é£ãããããããŸããããä»åŸã¯ãããã£ãæµãããããããšæã£ãŠãããšãå¿ã®äœè£ãã§ããŠè¯ãã§ãããïŒ
ãŒãã¯ããŸãäŒæ¥ã«ã§ãããéã³ã§ã¢ããªéçºããŠã¿ãããšæããŸãïŒé²æããã£ãããŸãããã°ã«æžãããšæããŸãã®ã§ã楜ãã¿ã«...ïŒ(Facebook 飿ºãŸã§é²ããã ããã...)
crocos-js ã GitHub ã§å ¬éããŸãã
ã¿ãªããããã«ã¡ã¯ïŒåŸ¡ç¡æ²æ±°ããŠãããŸãïŒ
@riafããŸãã®åãäœè€ãšèšããŸãïŒ
瀟å ã©ã€ãã©ãªã OSS åãããšã¢ãããšèãã(誀解)ã®ã§ããã®ã玹ä»ã§ãïŒ
Crocos 瀟å ã§äœ¿çšããŠãã JavaScript ã©ã€ãã©ãªã GitHub ã§å ¬éããŸããã
https://github.com/crocos/crocos-js
以å㯠CoffeeScript ã§éçºããŠããããããã®åæ®ããå°ãæ®ã£ãŠããŸãã
äžéšãæ±çšçã§ã¯ãªãéšåãé€ããŠããŸããCrocos 瀟å çšã®ã©ã€ãã©ãªã¯ãä»åå ¬éããã³ãŒãã«äžéšæ©èœã远å ã㊠build ããŠããŸãã
æ¬æ¥ã¯ããã®ã©ã€ãã©ãªã®ç°¡åãªäœ¿ãæ¹ãšãã玹ä»ããŸãã crocos-js ã§åºæ¥ãããšã¯ãã£ãããšä»¥äžã®ãããªãã®ã§ãã
ã©ã€ãã©ãªã®èªã¿èŸŒã¿åŸ ã¡
ãã£ãã·ã¥æ©èœ (localStorage ããŒã¹)
xfbml ã®æ¡åŒµæ©èœ (fbx)
[for CSS] ãã°ã€ã³ç¶æ ã®å€å®
[for CSS] iframe å ãã©ããã®å€å® (Facebook ã® Canvas ã§ã¯ãããã¡ãªãã€)
éå€ãªå¥Ž (nl2brãtruncateãredirect)
å šãŠã«ããŒã§ããŠãŸããã qunit ã䜿ã£ããã¹ãããããŸãããã¡ãããµã³ãã«ãšããŠåèã«ãªããããããŸããã
https://github.com/crocos/crocos-js/tree/master/test/unit
ç°¡åãªäŸãæããªãã以äžãäœ¿ãæ¹ã§ãã
èªã¿èŸŒã
ã©ã®æ©èœã䜿ãã«ããšãããã html ã§èªã¿èŸŒãŸãªããè¡ããªãã®ã§ãããjQuery ã«äŸåããŠããã®ã§ãjQuery ã®åŸã«èªã¿èŸŒãã§ãã ããã
ããšãã°:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="crocos.min.js"></script>
xfbml ã®æ¡åŒµ (fbx) ã䜿ã
Graph API ã«ãªã¯ãšã¹ãããçµæãèªåçã« HTML ã«å±éããæ©èœããããŸãã
<span class="fbx-graph" data-fbx-id="1276368138" data-fbx-field="name"></span>ãããããããïŒ
ããã ãã ãš xfbml ã§ãåºæ¥ããã§ããã xfbml ã ãšããŸã倧éã®ã¿ã°ãå©çšã§ããªãã£ãããä»ã®ããããã£ã䜿ãããæããã£ããããã®ã§ãã®æ©èœã远å ããŠãããŸãã
class ã« fbx-graph ãæå®ãããŠããã¿ã°ã¯ Graph API ãªã¯ãšã¹ããè¡ãã¿ã°ã§ããdata-fbx-id ã«ãªããžã§ã¯ãã® ID ããdata-fbx-field ã«ã¯è¡šç€ºãããèŠçŽ å (name ãšã email ãšã picture ãšãã®æåå) ãæå®ããŸãã
ãŸããURL ã«å¯Ÿãã Like ã®æ°ã衚瀺ãããå Žåã«äœ¿ãã fbx-like-count ããããŸãã
⥠<span class="fbx-like-count" data-fbx-url="http://crocos.co.jp"></span>
ãã£ãã·ã¥æ©èœ
ãŸã ãã¹ãäžã§ãããlocalStorage ãå©çšãããã£ãã·ã¥æ©èœãå®è£ ããŠãããŸãã localStorage ãç¡ããšåäœããªãã®ã§ãä»ã¯ beta æ±ãã§ãã
crocos.cache.setãcrocos.cache.getãcrocos.cache.hasã®ä»ã« crocos.cache.with ãšããã¡ãœãããããã以äžã®ããã«ãã£ãã·ã¥ãããå Žåãšãªãå Žåã䞊ã¹ãŠæžããã®ã§äŸ¿å©ã§ãã
// `cache_key` ãšããååã§ãã£ãã·ã¥ãæ¢ã crocos.cache.with('cache_key', function(dfd) { // ãã£ãã·ã¥ããªãå Žåã®åŠç FB.api('/me', function(response) { dfd.resolve(response); }); return dfd.promise(); }, { expire: 3600 }).done(function(response){ // ãã£ãã·ã¥ããã£ãŠãç¡ããŠãããã§åãåãã console.log(response); });
èªåçã« html ã« class ãã€ããŸã
iframe å ã§è¡šç€ºããããã®ãšãå€éšã® URL ã§è¡šç€ºãããã®ãåããªãœãŒã¹ã§ç®¡çãããããšããããŸããã crocos-js ã§ã¯ã<html>ã« iframe å ã®å Žå㯠in-frameãå€ã®å Žå㯠self-frame ãšããã¯ã©ã¹ãä»äžããŸããããšã¯ CSS ã§ .in-frame .anyelements { .. } ã®ããã«èšè¿°ããã ãã§ãiframe å ã®æã ãæå®ãããã¹ã¿ã€ã«ãªã©ãé©çšã§ããŸãã
ãŸããFacebook ã®ã³ãã¯ãç¶æ ã«ãã£ãŠ fbstatus-connected ã®ãããªã¯ã©ã¹ãä»äžããŸããfbstatus- ã®åŸã« FB.getLoginStatus(function(response){}) ãããšãã® response.status ãçµåããæååã«ãªããŸãã
Facebook JS SDK ã®èªã¿èŸŒã¿åŸ ã¡ããã
Facebook ã¢ããªãéçºããŠãããšãFB.initããããã©ããåãããªãã¿ã€ãã³ã°ããã£ãããšããå ±éåããããšããã§ããããããã®ã¿ã€ãã³ã°ã§ FB ãããä¿èšŒãªããïŒããšãæ©ãããšããã£ãã®ã§ã倿°ãååšãããã©ãããå€å®ããŠãå®çŸ©ããããå®è¡ãã颿°ãç»é²ã§ããããã«ããŠãããŸãã
Facebook ã®ã¿ãFB.init ãããŠãããã©ãããå€å®ãããã®ã§ãFB.initãèšè¿°ããéã« window.crocos_facebook_initialized = true; ãšæžãå¿ èŠããããŸãã
ã€ãŸãã以äžã®æ§ã«ããŸãã
window.fbAsyncInit = function() { FB.init({...}); // Additional initialization code here window.crocos_facebook_initialized = true; }
ãããããšãããšã¯ crocos ããå®çŸ©ãããŠããã°ä»¥äžã®ããã«èšè¿°ã§ããŸãã
crocos.wait("FB").done(function(){ // ããã§ã¯ FB åæåæžã¿ FB.api("/Crocos.Inc", function(response){ console.log(response); }); });
以äžããã£ãããšè§£èª¬ã§ããã ãŸã ãŸã 远å ãããæ©èœãããã®ã§ããããããéçºç¶ããŠãããŸãïŒ
ãã ãéçºè ã¯åäžäººã§ããããããããµã PHP ããã°ã©ããªã®ã§ããããããšã¢ã¬ãªãšãããããããã§ããããã²ãã²ããã³ããšã Pull Request ãšããåŸ ã¡ããŠãããŸãã®ã§ãããããããããããŸãïŒ
æå€ãšç¥ãããŠããªããFacebook API ã®äœ¿ãæ¹
é£ç¶ã§ããã«ã¡ã¯ãFacebook ã§é£²ã¿ã«è¡ã人ãåã£ãŠãããããïŒãããä»ããŸãã...ã@riaf(Facebook) ã§ã...ã
Facebook ã¢ããªãéçºãããšãã«å¿ ã䜿ãããšã«ãªã Facebook API ã§ãããæ®éã«äœ¿ã£ãŠãããšãªããªãæ°ã¥ããªããããªäœ¿ãæ¹ããã£ããããŸãã ä»åã¯ç€Ÿå ã®æ å ±å ±æã®ããã«äœ¿ã£ãŠãã wiki ã«ã¡ã¢ããŠããããã®ãããæå€ãšç¥ãããŠããªã API ã®äœ¿ãæ¹ã幟ã€ã玹ä»ããããšæããŸãã
API ã®ãã©ã¡ãŒã¿ã« locale ãã»ããã§ãã
ã¢ããªãéçºããããã§ãã£ãšããã«åœããåé¡ããŠãŒã¶ãŒåãæ¥æ¬èªã§ååŸãããããšããæ©ã¿ãããããªãšæããŸãã ããããªæ¡ä»¶ã§ API ãå®è¡ããŠã¿ãŠãã©ããã FQL ã® profile ããŒãã«ãããªãåããã£ãœãïŒããšããaccess_token ãä»ããŠãããšãã¡ã£ãœãïŒããšããã£ãŠã¿ããã®ã®ãããŸãã¡æ£è§£ãããããªããã€ã§ããïŒãããšå ±æããŠããã ããæ¹ãå± ãã®ã§ã¯ãªãã§ãããŒãïŒ
å®ã¯ãããAPI ãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ã« locale ãã»ããããã ããªãã§ããã 以äžã«ãPHP ã§è±èªã®ååãšæ¥æ¬èªã®ååãååŸããäŸã瀺ããŸãã
<?php $path = '/1276368138'; $response = $facebook->api($path, ['locale' => 'en_US']); echo $response['name'], PHP_EOL; // => "Keisuke Sato" $response = $facebook->api($path, ['locale' => 'ja']); echo $response['name'], PHP_EOL; // => "äœè€ 䜳ç¥"
ãšããã®ããã«èšèªãæå®ããŠæ å ±ãååŸããããšãå¯èœã§ãã
ããã©ã«ãã ãšè¿ã£ãŠããªãå€ãååŸã§ãã
ããšãã°ãåã ã¡ãªã¹ããšäžç·ã«åéã®èªçæ¥æ å ±ãååŸãããããã¿ãããªããšã£ãŠããŸã«ãããã§ããããã§ããŸããã«ããã¥ã¡ã³ãã«æžããŠããéãã«ããããšãããšãã£ãšãFQL ã® multiquery ã§åã ã¡ãªã¹ãååŸããŠãããã WHERE IN ã«å ¥ããŠãåãŠãŒã¶ãŒã®è©³çްæ å ±ãååŸããããšããæ¹æ³ãæãã€ããŸãããFQL ãè€æ°ãªã¯ãšã¹ããããšãã¬ã¹ãã³ã¹ãé ããçµæãçµåãããããã®ãé¢åã ã£ããããŸãã ããããã¡ãã£ãšãã©ã¡ãŒã¿ã«å·¥å€«ãããã ãã§æ å ±ãååŸã§ããŸãã以äžã«ãµã³ãã«ã瀺ããŸãã
<?php $response = $facebook->api('/me/friends', [ 'fields' => 'id,name,birthday', 'limit' => 5, 'locale' => 'ja', ]);
éåžžã/me/friends ã«ãªã¯ãšã¹ããããš id,name ã ããè¿ã£ãŠããŸããããã®ããã« fields ã« id,name,birthday ãæå®ãããšããã®å€ããã®ãŸãŸè¿ã£ãŠããŸãã (ãã¡ãããfriends_birthday ãšãã£ãããŒããã·ã§ã³ãå¿ èŠã§ã)
Page Access Token ã /me/accounts 以å€ã®æ¹æ³ã§ååŸ
Facebook ããŒãžã®ç®¡çæš©éãå©çšããã¢ã㪠(manage_pagesãèŠæ±ãããã€) ã ãšãããŒãžã«å¯Ÿããã¢ã¯ã»ã¹ã¯ Page Access Token ã䜿ããšããäºã«ãªã£ãŠããŸãã ååã®èšäºã§ã¯ /me/accounts ã§ããŒãžäžèЧãšã¢ã¯ã»ã¹ããŒã¯ã³ãäžç·ã«ååŸããŠããŸããããç¹å®ã®ããŒãžã®ã¢ã¯ã»ã¹ããŒã¯ã³ã ããæ¬²ããå Žåã¯ããã§ã¯ç¡é§ã§ãããé¢åã§ãã ããããå ã® fields ãã©ã¡ãŒã¿ã䜿ããšä»¥äžã®ããã«èšè¿°ã§ããŸãã
<?php $response = $facebook->api('/174849262641057', [ 'fields' => 'access_token', ]);
manage_pages ãæå¹ãªã¢ã¯ã»ã¹ããŒã¯ã³ä»ãã§ /PAGE_ID?fields=access_token ã«ãªã¯ãšã¹ããããš Page Access Token ãååŸã§ããŸãã
ã¡ãã£ãšããã¢ãã¯ãªãã¿ã§ãããã仿¥ã¯ãã®ãžãã§ïŒæ¬¡å以éããããŸã«ãããããã¿ãæžãããæ°æã¡ã§ãã
ã¡ãªã¿ã«ä»æ¥ã¯ Facebook Night vol.6 ã«åå ããããšæã£ãŠããŸãã®ã§ãåå ãããæ¹ã¯ããããããããããŸãïŒ

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch ⢠No registration required ⢠HD streaming
JavaScript ã§ Facebook ã¢ããªãäœã£ãŠ Heroku ã«çœ®ããã話
ã¯ãããŸããŠïŒ @riaf (Facebook) ã§ããã¯ãã³ã¹ã§ã¯ PHP ãæžããŠããŸãããæè¿ã¯ãããš JavaScript ãæžããŠããããšãå€ãã§ãã
è¶£å³ã¯ãFacebook API ã远ããããããšã§ãã
å æ¥ããµãšæãã€ããã¢ããªãäœã£ãŠã¿ããè©±ãæžããŠã¿ãŸãã
ä»åäœã£ãã¢ããªã¯ ãã¡ãããå®éã«äœ¿çšã§ããŸãã
ååãŸã§ã®ãããã
Facebook ããŒãžã®ç®¡çè ãäžåäžæãããã¿ã€ã ã©ã€ã³åãã
ãã®ã¿ã€ã ã©ã€ã³åã«ãã远å ãããæ°æ©èœãã¡ãã»ãŒãžãã§ãã£ãããåæã«è€æ°ããŒãžã管çããŠãããšããããã®ã¡ãã»ãŒãžã«æ°ã¥ãã«ãããšããåé¡ãåŒãèµ·ãããŠããã
解決ã®å
ã¡ãã£ãšã€ãããã®ã§æ®éã«æžããŸããã
ãããã£ãã¡ãã£ãšããåé¡ã®è§£æ±ºã«ã Facebook ã¢ããªã¯æå¹ã§ãã ä»åã®å Žåãã管çããŠãããã¹ãŠã®ããŒãžã®ã¡ãã»ãŒãžãæ°ããé ã«è¡šç€ºããã ãã®ã¢ããªããäœã£ãŠãããã°ãå·¡åã®æéãçããã®ã§ã¯ãªãããšèããŸããã
Facebook API ã調ã¹ãŠã¿ã
ãŸãã¯ããããããããŒãžã«å¯Ÿããã¡ãã»ãŒãžãååŸã§ãã API ãååšãããïŒããèŠãŠã¿ãŸãã
ããŒãžã«å±ããŠããã¡ãã»ãŒãžãªã®ã§ãGraph API ã® Page ãªããžã§ã¯ãã® ãããã調ã¹ããšåããããã§ãã
å®éã«èŠãŠã¿ããšãMessages ãšããé ç®ããããã©ãããããŒãžã«å¯Ÿããã¡ãã»ãŒãžã¯ååŸã§ããããã§ãã
ããããããã¥ã¡ã³ãã«ã¯æ¬¡ã®ããã«èšè¿°ãããŠããŸãã
You can read the messages for a page by issuing an HTTP GET request to /PAGE_ID/conversations with a Page Access Token and read_mailbox permission.
ã€ãŸãã/PAGE_ID/conversations ã«å¯Ÿã㊠read_mailbox ã®æš©éãæã£ã Page Access Token ãå¿ èŠã«ãªããšããããšã§ãã
詊ãã«äœãæš©éãæã£ãŠããªãç¶æ ã§ API ã«ã¢ã¯ã»ã¹ãããšãåœç¶ã§ãã (#298) Requires extended permission: read_mailbox ãšãã OAuthException ãçºçããŸãã
ãã®ããŒã¹ã§æžããŠããŠãæãã㊠Heroku ã«çœ®ããšãããŸã§ãã©ãçãããäžå®ã«ãªã£ãŠæ¥ãŸããã
ã¢ããªãå®è£ ããŠã¿ã
ãšããããå®è£ ãå§ããŠã¿ãããšã«ããŸãã
ä»åã¯ãã¡ãã£ãš backbone.js ã«ã€ããŠé è©£ãæ·±ããããšæã£ãã®ã§ããã¹ãŠ JavaScript ã§å®è£ ããŠã¿ãããšã«ããŸããã
äœã¯ãšãããããŸãã¯æ°èŠã¢ããªã±ãŒã·ã§ã³ãäœæããŸããJavaScript ã ãã§å®è£ ããã€ãããªã®ã§ãããã§å¿ èŠãªã®ã¯ appId ã®ã¿ã§ãããã¡ã€ã³ãªã©ã®èšå®ã ããã£ã¡ãããŠããã°ãšããããã¯åãããšæããŸãã
å®éã®ã¢ããªã® HTML ãœãŒã¹ã衚瀺ãããšããããé ãããšããããŸãããHTML èªäœã¯ 100 è¡ã«æºããªãçšåºŠã§ãã
å®è£ ã«é¢ããŠã¯å€éš JavaScript ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã // Generated by CoffeeScript 1.3.1 ãšããã³ã¡ã³ãã®ãšãããå®é㯠CoffeeScript ã§éçºããŸãããshadow.vimã䜿ã£ãŠããŠãåã¯ãšãŠãé¢åãããããªã®ã§å®éã® CoffeeScript ã®ãœãŒã¹ã³ãŒãã app.js.shd ããã¢ã¯ã»ã¹åºæ¥ãããã«ãªã£ãŠããŸãïŒã²ã©ãïŒã
ãœãŒã¹ã³ãŒãäžã§ã¯ãã¢ã¯ã»ã¹ããŠãã人㮠permission ã®ãã§ã㯠(read_mailbox ããããïŒ) ãã FB.defer ã®æ¡åŒµ ãªã©ãè¡ãªã£ãŠããã®ã§ã¡ãã£ãšé¢åãªéšåããããŸãããæ¬è³ªçã«ã¯ä»¥äžã®åŠçãè¡ãªã£ãŠããã ãã§ãã
/me/accounts ããèªåã管çããŠãã Facebook ããŒãžãšãPage Access Token ã®ãªã¹ããååŸ
ååŸããããŒãžã«å¯Ÿã㊠/PAGE_ID/conversations ãååŸ
ååŸã§ããé ã« backbone.js ã® Model ãçæããŠãCollection ã«è¿œå ãView ã reflesh
ãœãŒã¹ã³ãŒãäžã§ã¯ä»¥äžã®éšåã§ãã
main = -> check_permission().done -> FB.defer.api("/me/accounts", { fields: "id,name,category,access_token,link" }).done (response) -> pages = [] for page in response.data if page.category != "Application" pages[pages.length] = page fetch_messages_by_pages pages .fail -> alert "permission error!" thread_view.render() fetch_messages_by_pages = (pages) -> for page in pages do (page) -> FB.defer.api("/#{ page.id }/conversations", { access_token: page.access_token }).done (response) -> if "data" of response for conversation in response.data thread = new Thread $.extend {}, conversation, { page: page } thread_view.add_thread thread
ã¢ããªãå ¬éãã
ãªããããã端æã£ãæ°ãããŸããããã
ä»å㯠Facebook ã¢ããªãšããŠå©çšãããã£ãã®ã§ãSSL (https) ãå¿ èŠã§ãããæå㯠github pages ã䜿ãããšæã£ãŠããã®ã§ãã..ã
ããã§ãFacebook ã¢ããªç®¡çç»é¢ãããã¯ãªãã¯ããã ãã§ SSL ãæå¹ãªãµãŒããŒãçšæãããç¥ãµãŒãã¹ Heroku ã䜿ã£ãŠã¿ãããšæããŸããã
ãããã®ã¢ããªã¯ç¹ã«ãµãŒããŒãµã€ãã®å®è£ ã¯ç¡ãããã åçŽã«éçãã¡ã€ã«ããã¹ãã£ã³ã°ããã ãã ã£ãã®ã§ãã©ãèããŠã Heroku ã®åºçªã§ã¯ãªãã®ã§ããã以äžã®æ§ãª js ããããã€ãããµãŒããŒã¯ node.js ã§äœæããŸããã
var connect = require('connect'); var port = process.env.PORT || 3000; var app = connect() .use(function (req, res, next) { // force req.method = 'GET'; next(); }) .use(connect.static('public', { maxAge: 3000000 })) .listen(port);
ããã¯ããã²ã©ãã
ããšã¯éåžžã® Heroku ã¢ããªã®ããã〠(git push) ãããã ãã§ããããªããŠæ¥œãã³ãªãã§ããã...ãæ¬åœã«ç³ãèš³ãªãã
ã€ãŸã
Facebook ã¢ããªã£ãŠããã®ããã«ã¯ã©ã€ã¢ã³ããµã€ãã® JavaScript ã ãã§ãäœãã¡ãããã®ãªãã§ãïŒ
ãªãããæè»œãªæããããŠããŸããïŒ
æè¿ã¯ã¹ãã ã¢ããªããããããã£ãŠãã¢ããªãæ¬é ããŠããæ¹ãå¢ããŠãããããã©ã€ãã·ãŒèšå®ã§ã¢ããªã«æž¡ãæ å ±ãå¶éããããšãããŠããŸãæ¹åã«ãªã£ã¡ãããã¡ã§ãããã¢ããªã䜿ãããã«ãã£ãŠã¯ããã®ããã«äœããã¡ãã£ãšäŸ¿å©ã«ãªã£ãããåé¡ã解決ã§ããããã䟿å©ãªããŒã«ã«ããªãã®ã§ãè¡åã®è¯ãã¢ããªãå¢ããŠãã¿ããªã楜ãããäžã®äžã«ãªããšè¯ããªããšæã£ãŠããŸãã
ãšããæå³ã§ã¯ãApp Center ã«ã¯æåŸ åºæ¥ããããããŸããããŒïŒ