¤Ï¤Æ¥Öfooter¤ÎºîÀ®¡Êwith¡¡JSONP¡Ë?

[edit]

Ìܼ¡

[edit]

¤Ï¤¸¤á¤Ë

ARK-Web SandboxWiki¤Ç¤Ï¥Õ¥Ã¥¿¾ðÊó¤òɽ¸½¤¹¤ë¤¿¤á¤Ë¡¢PukiWiki¤Îblikifooter¥×¥é¥°¥¤¥ó¤òÍøÍѤ·¤Æ

#blikifooter(¿ÊÃÏ);

¤È¥³¥Þ¥ó¥É¤òµ­½Ò¤¹¤ë¤³¤È¤Ç

Åê¹Æ¼Ô ¿ÊÃÏ|¥Ñ¡¼¥Þ¥ê¥ó¥¯|trackback(10)|comment(5)

¤Î¤è¤¦¤ËÅê¹Æ¼Ô¡¢Permalink¡¢Trackback¡¢¥³¥á¥ó¥È¿ô¤òɽ¼¨¤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢ÄɲäǤϤƥ֤ؤÎÅÐÏ¿¥Ü¥¿¥ó¡¢¤Ï¤Æ¥Ö¿ô¥«¥¦¥ó¥È¡¢¤Ï¤Æ¥Ö¾ÜºÙ¾ðÊó¤òɽ¼¨¤¹¤ë¤¿¤á¤Ëblikifooter¥×¥é¥°¥¤¥ó¤ò¥«¥¹¥¿¥Þ¥¤¥º¤·¤Þ¤·¤¿¡£¡ÊÄɲøå¤Î¥¤¥á¡¼¥¸¤Ï²¼¤Î²èÁü¤ÎÄ̤ê¡Ë

&ref(): File not found: "hatebufooter_with_blikifooter.JPG" at page "¤Ï¤Æ¥Öfooter¤ÎºîÀ®¡Êwith¡¡JSONP¡Ë";

ÆäˤϤƥֿô¥«¥¦¥ó¥È¤È¤Ï¤Æ¥Ö¾ÜºÙ¾ðÊó¤Î¼èÆÀ/ɽ¼¨¤Ë¤ÏJSONP(JSON with Padding)¤òÍøÍѤǤ­¤ë¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¨¥ó¥È¥ê¡¼¾ðÊó¼èÆÀAPI¤ò»ÈÍѤ·¤Æ¼èÆÀ¤·¤Æ¤¤¤Þ¤¹¡£

¤Þ¤¿¡¢blikifooter¤ÈÀÚ¤êÎ¥¤·¤Æ¡¢¤Ï¤Æ¥ÖÅÐÏ¿¥Ü¥¿¥ó¡¢¤Ï¤Æ¥Ö¿ô¥«¥¦¥ó¥È¡¢¤Ï¤Æ¥Ö¾ÜºÙ¾ðÊó¤Îɽ¼¨µ¡Ç½¤Î¤ß¤ò»ý¤¿¤»¤¿PukiWiki¤Îhatebufooter¥×¥é¥°¥¤¥ó¤òºîÀ®¤·¤Þ¤·¤¿¡£

°Ê²¼¡¢¤³¤Î¥¨¥ó¥È¥ê¡¼¤Ç¤Ï

¤ò¹Ô¤¤¤Þ¤¹¡£

#blikimore;

[edit]

¤Ï¤Æ¥Öfooter¤Î³°Éô»ÅÍÍ

¤Ï¤Æ¥Öfooter¤Î³°Éô»ÅÍͤȤʤ뵡ǽ¤Ï²¼µ­¤Ë¤Ê¤ê¤Þ¤¹¡£

¤Ï¤Æ¥ÖÅÐÏ¿¥Ü¥¿¥ó¤Ï[B!]¤Î¥Ü¥¿¥ó¤Ç¡¢¥¯¥ê¥Ã¥¯¤¹¤ë¤ÈÅö³ºWiki¥Ú¡¼¥¸¤ò¤Ï¤Æ¥ÖÅÐÏ¿¤Ç¤­¤Þ¤¹¡£

¤Ï¤Æ¥Ö¿ô¥«¥¦¥ó¥È¤Îɽ¼¨¤È¡¢¤Ï¤Æ¥Ö¾ÜºÙ¾ðÊó¤Îɽ¼¨¤Ï¡¢Åö³ºWiki¥Ú¡¼¥¸¤¬1·ï°Ê¾å¤Ï¤Æ¥Ö¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Î¤ßÍ­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£

º£¡¢n(n=1¡ÁN)¿Í¤Ë¤è¤Ã¤ÆÅö³ºWiki¥Ú¡¼¥¸¤¬¤Ï¤Æ¥Ö¤µ¤ì¤Æ¤¤¤ë¤È¤¹¤ë¤È¡¢

¤Ï¤Æ¥Ö¿ô¥«¥¦¥ó¥È¤Ï

¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¤·¤Æ¤¤¤ë¥æ¡¼¥¶¡¼( n users )

¤Èɽ¼¨¤µ¤ì¡¢

¤Ï¤Æ¥Ö¾ÜºÙ¾ðÊó¤Ï¤Ï¤Æ¥Ö¿ô¥«¥¦¥ó¥È¤Ë³¤¤¤Æ

         <div>
           ¥æ¡¼¥¶1¤Î¤Ï¤Æ¥ÖÅÐÏ¿Æü»þ(yyyy/mm/dd hh:mm:ss) <a href="¥æ¡¼¥¶1¤ÎHatena::Bookmark¤ÎURL">¥æ¡¼¥¶1</a><br/>
           - ¥æ¡¼¥¶1¤Î¥³¥á¥ó¥È(¥æ¡¼¥¶1¤Î¥³¥á¥ó¥È¤¬¤â¤·¤¢¤ì¤Ðɽ¼¨¤µ¤ì¤ë)
         </div>
         <div>
           ¥æ¡¼¥¶2¤Î¤Ï¤Æ¥ÖÅÐÏ¿Æü»þ(yyyy/mm/dd hh:mm:ss) <a href="¥æ¡¼¥¶2¤ÎHatena::Bookmark¤ÎURL">¥æ¡¼¥¶2</a><br/>
           - ¥æ¡¼¥¶2¤Î¥³¥á¥ó¥È(¥æ¡¼¥¶2¤Î¥³¥á¥ó¥È¤¬¤â¤·¤¢¤ì¤Ðɽ¼¨¤µ¤ì¤ë)
         </div>
          :
          :
         <div>
           ¥æ¡¼¥¶N¤Î¤Ï¤Æ¥ÖÅÐÏ¿Æü»þ(yyyy/mm/dd hh:mm:ss) <a href="¥æ¡¼¥¶N¤ÎHatena::Bookmark¤ÎURL">¥æ¡¼¥¶N</a><br/>
           - ¥æ¡¼¥¶N¤Î¥³¥á¥ó¥È(¥æ¡¼¥¶N¤Î¥³¥á¥ó¥È¤¬¤â¤·¤¢¤ì¤Ðɽ¼¨¤µ¤ì¤ë)
         </div>

¤È¤¤¤¦¹½Â¤¤ÇÀ¸À®¡¢É½¼¨¤µ¤ì¤Þ¤¹¡£

hatebufooter¤Ï

#hatebufooter();

¤Èɽµ­¤¹¤ë¤³¤È¤ÇÅö³º¥Ú¡¼¥¸¤ÎÅö³º²Õ½ê¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£

[edit]

¥½¡¼¥¹²òÀâ

¤Ï¤Æ¥Öfooter¤Î¥á¥¤¥óÉô¤Î¥½¡¼¥¹¤Ï²¼µ­¤ÎÄ̤ê¤Ç¤¹¡ÊÄê¿ôÉô¤ÎÀë¸ÀÅù¤ÏºÜ¤»¤Æ¤¤¤Þ¤»¤ó¡Ë

01: function plugin_hatebufooter_convert() {
02: 
03:     global $script, $vars;
04: 
05:     $args   = func_get_args();
06:     $retval = "";
07: 
08:     if ( empty($args[1]) || ( ( !empty($args[1]) ) && $args[1] == true ) ) {
09: 
10: 	$permalink = $script . '?' . urlencode($vars['page']);
11: 	$permalink4bookmark = urlencode($permalink);
12: 
13:    // ¡Ö¤³¤Î¥¨¥ó¥È¥ê¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿¡×¥Ü¥¿¥ó¤Îɽ¼¨
14:    $retval .= sprintf('<a href="http://b.hatena.ne.jp/append?"><img alt="append.gif" src="" alt="¤³¤Î¥¨¥ó¥È¥ê¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿" width="" height="" border="0" /></a>', $permalink4bookmark, HATEBUFOOTER_HATENA_BOOKMARK_APPEND_IMG_URL, HATEBUFOOTER_HATENA_BOOKMARK_APPEND_IMG_WIDTH, HATEBUFOOTER_HATENA_BOOKMARK_APPEND_IMG_HEIGHT);
15: 
16:    // ¤Ï¤Æ¥Ö¿ô¥«¥¦¥ó¥È¤È¥Ö¥Ã¥¯¥Þ¡¼¥¯¤·¤Æ¤¤¤ë¥æ¡¼¥¶¤Î¾ÜºÙɽ¼¨¡ÊJSONP¤òÍøÍÑ¡Ë
17:    $md5_page = md5($vars['page']);
18:    $retval .=<<< HATENA_BOOKMARK_COUNT
19: <script type="text/javascript" src="./js/jsr_class.js"></script>
20: <div id="hatena_bookmark_count_detail_$md5_page">
21: </div>
22: <script type="text/javascript">
23: var hatena_jsonp_base = 'http://b.hatena.ne.jp/entry/json/';
24: var jsr = new JSONscriptRequest(hatena_jsonp_base + '?url=$permalink4bookmark&callback=hatena_footer_hundler_$md5_page');
25: jsr.buildScriptTag();
26: jsr.addScriptTag();
27: 
28: function hatena_footer_hundler_$md5_page(data) {
29: 
30:     if (data != null && data.count > 0) {
31:         var parent_div = document.getElementById('hatena_bookmark_count_detail_$md5_page');
32: 
33:         // ¥«¥¦¥ó¥¿²èÁü¤ò¼èÆÀ
34:         var counter_a = document.createElement('a');
35:         counter_a.setAttribute('href', 'http://b.hatena.ne.jp/entry/' + '$permalink');
36:         var counter_img = document.createElement('img');
37:         counter_img.setAttribute('src', 'http://b.hatena.ne.jp/entry/image/' + '$permalink');
38:         counter_a.appendChild(counter_img);
39: 
40: 	    // ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¤·¤Æ¤¤¤ë¥æ¡¼¥¶¡¼(xx users)
41:         // ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Çfooter¤Î²¼¤Ëɽ¼¨¤¹¤ë
42:         parent_div.appendChild(document.createTextNode('¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¤·¤Æ¤¤¤ë¥æ¡¼¥¶¡¼('));
43:         parent_div.appendChild(counter_a);
44:         parent_div.appendChild(document.createTextNode(')'));
45: 
46: 	    // ³Æ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤Î¾ÜºÙ¤ò¥ê¥¹¥Èɽ¼¨¤µ¤»¤ë
47:         var bookmarks = data.bookmarks;
48:         for (var i=0, bookmark; bookmark = bookmarks[i]; i++) {
49: 
50:             var user_div = document.createElement('div');
51: 
52:             // ¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¿¥¤¥à¥¹¥¿¥ó¥×¤Îɽ¼¨
53:             user_div.appendChild(document.createTextNode(bookmark.timestamp + ' '));
54: 
55:             // ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤·¤¿¥æ¡¼¥¶¤Îɽ¼¨
56:             var user_a = document.createElement('a');
57:             // yyyy/mm/dd hh:mm:ss¤«¤éyyyymmddʸ»úÎó¤òºîÀ®¤¹¤ë
58:             var user_a_timestamp = bookmark.timestamp.substring(0, bookmark.timestamp.indexOf(' ', 0));
59:             while (true) {
60:                 var tmp_timestamp = user_a_timestamp;
61:                 user_a_timestamp = tmp_timestamp.replace('/', '');
62:                 if (user_a_timestamp == tmp_timestamp) {
63:                     break;
64:                 }
65:             }
66:             user_a.setAttribute('href', 'http://b.hatena.ne.jp/' + bookmark.user + '/' + user_a_timestamp + '#bookmark-' + data.eid);
67:             user_a.appendChild(document.createTextNode(bookmark.user));
68:             user_div.appendChild(user_a);
69: 
70:             // ¥³¥á¥ó¥È¤Îɽ¼¨
71:             if ( bookmark.comment != '' ) {
72:                 user_div.appendChild(document.createElement('br'));
73:                 user_div.appendChild(document.createTextNode(' - ' + bookmark.comment));
74:             }
75: 
76:             parent_div.appendChild(user_div);
77:         }
78:     }
79:     jsr.removeScriptTag();
80: }
81: </script>
82: HATENA_BOOKMARK_COUNT;
83:     }
84: 
85:     return sprintf(HATEBUFOOTER_TEMPLATE, $retval);
86: }

´Êñ¤Ë²òÀ⤷¤Þ¤¹¡£

10,11¹ÔÌÜ
¤Ï¤Æ¤Ê¤¬Ä󶡤¹¤ë¼«Ê¬¤Î¥Ö¥í¥°¤ËÈï¥Ö¥Ã¥¯¥Þ¡¼¥¯¿ô¤òɽ¼¨¤¹¤ëµ¡Ç½¡¢¤ª¤è¤Ó¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¨¥ó¥È¥ê¡¼¾ðÊó¼èÆÀAPI¤òÍøÍѤ¹¤ë°Ù¤Ë¡¢Åö³ºWiki¥Ú¡¼¥¸¤ÎPermalink¤òÀ¸À®¤·¤Æ¤¤¤Þ¤¹¡Êξµ¡Ç½¡¢API¤ÏÂоݥڡ¼¥¸¤ÎPermalink¤ò°ú¿ô¤È¤·¤ÆÍ׵᤹¤ë¤¿¤á¡Ë¡£¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¨¥ó¥È¥ê¡¼¾ðÊó¼èÆÀAPI¤Ïʸ»ú%¤âurlencode¤µ¤ì¤¿URL¤òÍ׵᤹¤ë¤¿¤á¡¢Permalink¤ò2²óurlencode()¤Ë¤«¤±¤Æ¤¤¤Þ¤¹¡£
13¡Á15¹ÔÌÜ
¤Ï¤Æ¥ÖÅÐÏ¿¥Ü¥¿¥ó¤Î¥¿¥°¤òÀ¸À®¤·¤Æ¤¤¤Þ¤¹¡£¤Ï¤Æ¥ÖÅÐÏ¿µ¡Ç½¤Ï
http://b.hatena.ne.jp/append?$permalink4bookmark(¢«Permalink¤ò2²óurlencode()¤Ë¤«¤±¤¿URL)
¤Ë¥ê¥ó¥¯¤¹¤ë¤³¤È¤Ç¼Â¸½¤µ¤ì¤Þ¤¹¡£
16¡Á83¹ÔÌÜ
JSONP¤òÍøÍѤ·¤ÆÅö³ºWiki¥Ú¡¼¥¸¤ËÂФ·¤Æ£±·ï°Ê¾å¤Ï¤Æ¥Ö¤¬¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ë¤Ï¤Æ¥Ö¿ô¥«¥¦¥ó¥Èɽ¼¨¤È¾ÜºÙ¾ðÊó¤Îɽ¼¨¤ò¹Ô¤¤¤Þ¤¹¡£JSONPÍøÍÑÉô¤Î²òÀâ¤Ë¾ÜºÙ¤òµ­½Ò¤·¤Þ¤¹¡£
85¹ÔÌÜ
À¸À®¤·¤¿¥¿¥°¡Ê¡á¤Ï¤Æ¥Öfooter¤Î½ÐÎϡˤòÊÖ¤·¤Þ¤¹¡£
[edit]

JSONPÍøÍÑÉô¤Î²òÀâ

¥½¡¼¥¹²òÀâ¤Î16¡Á83¹ÔÌܤϲ¼µ­¤ÎHTML¥¿¥°¤ÈJavaScript¥³¡¼¥É¤òÀ¸À®¤·¤ÆÊÖ¤¹°Ù¤Î¥í¥¸¥Ã¥¯¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£$md5_page¤Ï¼ÂºÝ¤Ë¤ÏÅö³ºWiki¥Ú¡¼¥¸¤Î¥Ú¡¼¥¸Ì¾¤òPHP¤Îmd5()´Ø¿ô¤Ç¥Ï¥Ã¥·¥å²½¤·¤¿Ãͤ¬»ØÄꤵ¤ì¤Þ¤¹¡£¤³¤ì¤Ï¥È¥Ã¥×¥Ú¡¼¥¸¤Ê¤É¤ÇÊ£¿ôWiki¥Ú¡¼¥¸¤¬Ê¤ó¤Çɽ¼¨¤µ¤ì¤ë¾ì¹ç¤Ë¡¢¤Ï¤Æ¥Öfooter¤Ë¤è¤Ã¤Æ³ÆWiki¥Ú¡¼¥¸Ã±°Ì¤Ë½ÐÎϤµ¤ì¤ëdiv¤Îid¤äJSONP¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô̾¤¬¥Ð¥Ã¥Æ¥£¥ó¥°¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Î»ÅÁȤߤǤ¹¡£

<script type="text/javascript" src="./js/jsr_class.js"></script>
<div id="hatena_bookmark_count_detail_$md5_page">
</div>
<script type="text/javascript">
  var hatena_jsonp_base = 'http://b.hatena.ne.jp/entry/json/';
  var jsr = new JSONscriptRequest(hatena_jsonp_base + '?url=$permalink4bookmark&callback=hatena_footer_hundler_$md5_page');
  jsr.buildScriptTag();
  jsr.addScriptTag();

  function hatena_footer_hundler_$md5_page(data) {

      if (data != null && data.count > 0) {
          var parent_div = document.getElementById('hatena_bookmark_count_detail_$md5_page');

          // ¥«¥¦¥ó¥¿²èÁü¤ò¼èÆÀ
          var counter_a = document.createElement('a');
          counter_a.setAttribute('href', 'http://b.hatena.ne.jp/entry/' + '$permalink');
          var counter_img = document.createElement('img');
          counter_img.setAttribute('src', 'http://b.hatena.ne.jp/entry/image/' + '$permalink');
          counter_a.appendChild(counter_img);

          // ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¤·¤Æ¤¤¤ë¥æ¡¼¥¶¡¼(xx users)
          // ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Çfooter¤Î²¼¤Ëɽ¼¨¤¹¤ë
          parent_div.appendChild(document.createTextNode('¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¤·¤Æ¤¤¤ë¥æ¡¼¥¶¡¼('));
          parent_div.appendChild(counter_a);
          parent_div.appendChild(document.createTextNode(')'));

          // ³Æ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤Î¾ÜºÙ¤ò¥ê¥¹¥Èɽ¼¨¤µ¤»¤ë
          var bookmarks = data.bookmarks;
          for (var i=0, bookmark; bookmark = bookmarks[i]; i++) {

              var user_div = document.createElement('div');

              // ¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¿¥¤¥à¥¹¥¿¥ó¥×¤Îɽ¼¨
              user_div.appendChild(document.createTextNode(bookmark.timestamp + ' '));

              // ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤·¤¿¥æ¡¼¥¶¤Îɽ¼¨
              var user_a = document.createElement('a');
              // yyyy/mm/dd hh:mm:ss¤«¤éyyyymmddʸ»úÎó¤òºîÀ®¤¹¤ë
              var user_a_timestamp = bookmark.timestamp.substring(0, bookmark.timestamp.indexOf(' ', 0));
              while (true) {
                  var tmp_timestamp = user_a_timestamp;
                  user_a_timestamp = tmp_timestamp.replace('/', '');
                  if (user_a_timestamp == tmp_timestamp) {
                      break;
                  }
              }
              user_a.setAttribute('href', 'http://b.hatena.ne.jp/' + bookmark.user + '/' + user_a_timestamp + '#bookmark-' + data.eid);
              user_a.appendChild(document.createTextNode(bookmark.user));
              user_div.appendChild(user_a);

              // ¥³¥á¥ó¥È¤Îɽ¼¨
              if ( bookmark.comment != '' ) {
                  user_div.appendChild(document.createElement('br'));
                  user_div.appendChild(document.createTextNode(' - ' + bookmark.comment));
              }

              parent_div.appendChild(user_div);
          }
      }
      jsr.removeScriptTag();
  }
</script>

¹½Â¤¤ÏÂ礭¤¯Ê¬¤±¤Æ£²¤Ä¤Ç¤¹¡£

[edit]

JSONscriptRequest¥¯¥é¥¹¤ò»È¤Ã¤¿JSONP¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Î¼Â¹Ô

JSONP¤Ï¥Õ¥©¡¼¥Þ¥Ã¥È¤È¤·¤Æ¤ÏJSON(JavaScript Object Notation)¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Ç¡¼¥¿¡Ê¥Æ¥­¥¹¥È¡Ë¤ò¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô̾¤Ç³ç¤Ã¤¿¤â¤Î¤Ë¤¹¤®¤Þ¤»¤ó¡£Î㤨¤Ð¡¢

"bindings": [
        {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
        {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
        {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]

¤Î¤è¤¦¤ÊJSON¥Ç¡¼¥¿¤ò¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô̾¤òhundler¤ÇJSONP²½¤¹¤ë¤È

hundler("bindings": [
            {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
            {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
            {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
         ]
);

¤È¤Ê¤ê¤Þ¤¹¡£

¤Ï¤Æ¤Ê¤¬Ä󶡤¹¤ë¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¨¥ó¥È¥ê¡¼¾ðÊó¼èÆÀAPI¤ÏJSON·Á¼°¤Ç¤Ï¤Æ¥Ö¾ðÊó¤òÊÖ¤·¤Æ¤¯¤ì¤Þ¤¹¡£¤½¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï²¼µ­¤ÎÎã¤Ë¤Ê¤ê¤Þ¤¹¡£

 {
   "count":"14",
   "url":"http://www.ark-web.jp/",
   "bookmarks":[
     {
       "timestamp":"2006/09/07 01:35:08",
       "comment":"  \u4e2d\u91ce\u5b97\u3000webSig24/7",
       "user":"pongpongland",
       "tags":["web","design","contents","dh","TVBlog"]
     },
     {
       "timestamp":"2006/08/10 15:35:29",
       "comment":"",
       "user":"keepintouch",
       "tags":["web\u5236\u4f5c"]
     },
     {
       :
       :
     },
     :
   ],
   "title":"Web\u5236\u4f5c(\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u4f5c\u6210) \u30a2\u30fc\u30af\u30a6\u30a7\u30d6:Web\u30c7\u30b6\u30a4\u30f3(HTML,Flash)\u30fb\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u30fbZen Cart\u5c0e\u5165:\u6771\u4eac\u90fd\u4e2d\u592e\u533a\u9280\u5ea7",
   "eid":"1047377",
   "entry_url":"http://b.hatena.ne.jp/entry/http://www.ark-web.jp/",
   "screenshot":"http://screenshot.hatena.ne.jp/images/120x90/d/f/5/2/0/571e29202efd8abbf1fd91db361d92470a7.jpg"
 }

¤Þ¤¿¡¢°ú¿ô¤Ç¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô̾¤ò»ØÄꤹ¤ë¤³¤È¤ÇJSONP²½¤·¤¿¥Æ¥­¥¹¥È¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£²¾¤Ë¤³¤ÎÎã¤Ç¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô̾¤òhundler¤È¤¹¤ë¤È

hundler(
 {
   "count":"14",
   "url":"http://www.ark-web.jp/",
   "bookmarks":[
     {
       "timestamp":"2006/09/07 01:35:08",
       "comment":"  \u4e2d\u91ce\u5b97\u3000webSig24/7",
       "user":"pongpongland",
       "tags":["web","design","contents","dh","TVBlog"]
     },
     {
       "timestamp":"2006/08/10 15:35:29",
       "comment":"",
       "user":"keepintouch",
       "tags":["web\u5236\u4f5c"]
     },
     {
       :
       :
     },
     :
   ],
   "title":"Web\u5236\u4f5c(\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u4f5c\u6210) \u30a2\u30fc\u30af\u30a6\u30a7\u30d6:Web\u30c7\u30b6\u30a4\u30f3(HTML,Flash)\u30fb\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u30fbZen Cart\u5c0e\u5165:\u6771\u4eac\u90fd\u4e2d\u592e\u533a\u9280\u5ea7",
   "eid":"1047377",
   "entry_url":"http://b.hatena.ne.jp/entry/http://www.ark-web.jp/",
   "screenshot":"http://screenshot.hatena.ne.jp/images/120x90/d/f/5/2/0/571e29202efd8abbf1fd91db361d92470a7.jpg"
 }
);

¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£

JSONP¤Ï¤½¤Î¤Þ¤Þ¤Ç¤Ïñ¤Ë¥Æ¥­¥¹¥È¤Ë²á¤®¤Ê¤¤¤¿¤á¡¢¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤òµ¯Æ°¤·¤ÆJSON¥Ç¡¼¥¿¤ò¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ËÅϤ¹»ÅÁȤߤ¬É¬ÍפǤ¹¡£¤³¤Î»Å»ö¤ò¤¹¤ë¤¿¤á¤Ë¡¢Jason Levitt»á¤¬ºîÀ®¡¢¸ø³«¤µ¤ì¤Æ¤¤¤ëJSONscriptRequest¥¯¥é¥¹¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£

¤½¤Î²Õ½ê¤¬

<script type="text/javascript" src="./js/jsr_class.js"></script>
<div id="hatena_bookmark_count_detail_$md5_page">
</div>
<script type="text/javascript">
  var hatena_jsonp_base = 'http://b.hatena.ne.jp/entry/json/';
  var jsr = new JSONscriptRequest(hatena_jsonp_base + '?url=$permalink4bookmark&callback=hatena_footer_hundler_$md5_page');
  jsr.buildScriptTag();
  jsr.addScriptTag();

¤Ë¤Ê¤ê¤Þ¤¹¡£

jsr_class.js¤ËJSONscriptRequest¥¯¥é¥¹¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤ì¤ò¤Þ¤º¥í¡¼¥É¤·¤Þ¤¹¡£¼¡¤Ë¡¢JSONscriptRequest¥ª¥Ö¥¸¥§¥¯¥È¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¨¥ó¥È¥ê¡¼¾ðÊó¼èÆÀAPI¤Ø¤Î¥ê¥¯¥¨¥¹¥ÈURL¤ò°ú¿ô¤Ë¤·¤ÆºîÀ®¤·¤Þ¤¹¡£°ú¿ô¤ËÍ¿¤¨¤¿URL¤Îcallback¥Ñ¥é¥á¡¼¥¿¤Ë»ØÄꤷ¤¿Ãͤ¬¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô̾¤Ë¤Ê¤ê¤Þ¤¹¡£JSONscriptRequest¥ª¥Ö¥¸¥§¥¯¥È(jsr)¤ÏbuildScriptTag()¤Ç¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ò¼Â¹Ô¤¹¤ëscript¥¿¥°¤òÀ¸À®¤·¡¢addScriptTag()¤Ç¥Ú¡¼¥¸¤ÎheadÆâ¤Ë¤½¤Îscript¥¿¥°¤òËä¤á¹þ¤ß¤Þ¤¹¡£

°Ê¾å¤Ë¤è¤Ã¤Æ¡¢¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¨¥ó¥È¥ê¡¼¾ðÊó¼èÆÀAPI¤¬ÊÖ¤¹JSON¥Ç¡¼¥¿¤ò»ØÄꤷ¤¿¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Ç¼õ¤±¤Æ½èÍý¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£

[edit]

JSONP¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ÎÄêµÁ

¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Î°ú¿ô¤Ë¤Ï¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥¨¥ó¥È¥ê¡¼¾ðÊó¼èÆÀAPI¤¬ÊÖ¤¹JSON¥Ç¡¼¥¿¤¬³ÊǼ¤µ¤ì¤Þ¤¹¡£Àè¤ÎÎã¤Ç¸À¤¨¤Ð¡¢

 {
   "count":"14",
   "url":"http://www.ark-web.jp/",
   "bookmarks":[
     {
       "timestamp":"2006/09/07 01:35:08",
       "comment":"  \u4e2d\u91ce\u5b97\u3000webSig24/7",
       "user":"pongpongland",
       "tags":["web","design","contents","dh","TVBlog"]
     },
     {
       "timestamp":"2006/08/10 15:35:29",
       "comment":"",
       "user":"keepintouch",
       "tags":["web\u5236\u4f5c"]
     },
     {
       :
       :
     },
     :
   ],
   "title":"Web\u5236\u4f5c(\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u4f5c\u6210) \u30a2\u30fc\u30af\u30a6\u30a7\u30d6:Web\u30c7\u30b6\u30a4\u30f3(HTML,Flash)\u30fb\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u30fbZen Cart\u5c0e\u5165:\u6771\u4eac\u90fd\u4e2d\u592e\u533a\u9280\u5ea7",
   "eid":"1047377",
   "entry_url":"http://b.hatena.ne.jp/entry/http://www.ark-web.jp/",
   "screenshot":"http://screenshot.hatena.ne.jp/images/120x90/d/f/5/2/0/571e29202efd8abbf1fd91db361d92470a7.jpg"
 }

¤¬³ÊǼ¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£Îã¤Ç¤Ï°ú¿ô̾data¤Ç¼õ¤±¤Æ¤¤¤ë¤Î¤Ç¡¢Î㤨¤Ð¡¢Åö³ºWiki¥Ú¡¼¥¸¤ËÂФ¹¤ë¤Ï¤Æ¥Ö¿ô¤ò¼èÆÀ¤·¤¿¤¤¾ì¹ç¤Ïdata.count¤Ç¼èÆÀ¤Ç¤­¤Þ¤¹¡£

¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ÎËÁƬ¤Ç¤Ï

 function hatena_footer_hundler_$md5_page(data) {

     if (data != null && data.count > 0) {

¤Ë¤è¤Ã¤Æ¡¢£±·ï°Ê¾å¥Ö¥Ã¥¯¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Î¤ß¸å¤Î½èÍý¤ò·Ñ³¤·¤Æ¤¤¤Þ¤¹¡£

¤Ï¤Æ¥Ö¿ô¥«¥¦¥ó¥È²èÁü¤Î¼èÆÀ¤Ïhttp://b.hatena.ne.jp/entry/image/$permalink¤Ç¼èÆÀ¤·¤Æ¤¤¤Þ¤¹¡£

¤Ï¤Æ¥Ö¾ÜºÙ¾ðÊó¤Ï¤Þ¤º¡¢

          // ³Æ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤Î¾ÜºÙ¤ò¥ê¥¹¥Èɽ¼¨¤µ¤»¤ë
          var bookmarks = data.bookmarks;

¤Çbookmarks¤Ë¥Ï¥Ã¥·¥å¤ÎÇÛÎó¤ò³ÊǼ¤·¤¿¾å¤Ç¡¢

          for (var i=0, bookmark; bookmark = bookmarks[i]; i++) {

¤ÇÇÛÎó¤Î³ÆÍ×ÁÇ¡Ê¡á³Æ¥Ö¥Ã¥¯¥Þ¡¼¥¯Ã±°Ì¤Î¾ðÊó¡Ë¤ò½èÍý¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î»þÅÀ¤Çbookmark¤Ë¤Ï

     {
       "timestamp":"2006/09/07 01:35:08",
       "comment":"  \u4e2d\u91ce\u5b97\u3000webSig24/7",
       "user":"pongpongland",
       "tags":["web","design","contents","dh","TVBlog"]
     }

¤Î¥Ç¡¼¥¿¹½Â¤¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢Åö³º¥Ö¥Ã¥¯¥Þ¡¼¥¯¤Î¥¿¥¤¥à¥¹¥¿¥ó¥×¤¬Íߤ·¤±¤ì¤Ðbookmark.timestamp¡¢¥³¥á¥ó¥È¤¬Íߤ·¤±¤ì¤Ðbookmark.comment¤Ç¼èÆÀ¤Ç¤­¤Þ¤¹¡£

¸å¤ÏŬÅö¤ËÀ°·Á¤·¤Æ¿Æ¤Îdiv¤ËappendChild()¤·¤Æ¤¤¤ë¤À¤±¤Ç¤¹¡£

¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ôÆâ¤ÇºÇ¸å¤Ë¼Â¹Ô¤µ¤ì¤ëjsr.removeScriptTag()¤Ï¡¢addScriptTag()¤ÇËä¤á¹þ¤ó¤À¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ôµ¯Æ°ÍÑ¥¹¥¯¥ê¥×¥È¤ò¼è¤ê½ü¤¯¸å»ÏËöÍѥ᥽¥Ã¥É¤Ç¤¹¡£

[edit]

·ë¶É¡¢JSONP¤Ç²¿¤¬´ò¤·¤¤¤Î¤«¡©

JavaScript¤Ë¤ª¤¤¤Æ¤ÏJSON¤ÏXML¤ËÈæ¤Ù¤ÆÈó¾ï¤Ë´Ê°×¤ËÁàºî¤Ç¤­¤Þ¤¹¡£Ajax¹½ÃۤκݤËJSON¤ò¥Ç¡¼¥¿·Á¼°¤ËÁªÂò¤Ç¤­¤ì¤Ð¤È¤Æ¤â´ò¤·¤¤¤ï¤±¤Ç¤¹¡£¤·¤«¤·¡¢¥¯¥í¥¹¥É¥á¥¤¥ó¤ÎÀ©Ì󤫤龥ɥᥤ¥ó¤ÎJSON¥Ç¡¼¥¿¤òXMLHttpRequest¤Ç¤ÏÆɤ߹þ¤á¤Þ¤»¤ó¡£¤½¤³¤Ç¡¢JavaScript¤¬JSONP¤òJavaScript¥½¡¼¥¹¤È¤·¤Æ´Ý¤´¤È¥¤¥ó¥¯¥ë¡¼¥É¤Ç¤­¤ë¤³¤È¤òÍøÍѤ·¤Æ¡¢Â¾¥É¥á¥¤¥ó¤ÎJSON¥Ç¡¼¥¿¤òÆɤ߹þ¤á¤ë¤è¤¦¤Ë¤¹¤ë»ÅÁȤߤȤ·¤ÆJSONP¤òÍøÍѤ·¤Þ¤¹¡£JSONP¤òÍѤ¤¤ì¤Ð¥µ¡¼¥Ð¦¤ËÂоݥǡ¼¥¿¤ò¼èÆÀ¤·¤ÆJSON·Á¼°¤ËÊÑ´¹¤¹¤ë¥¹¥¯¥ê¥×¥È¤òÃÖ¤¯É¬Íפ⤢¤ê¤Þ¤»¤ó¡£

¤Þ¤È¤á¤ë¤È¡¢JSONP¤Ç´ò¤·¤¤¤Î¤Ï¾¥É¥á¥¤¥ó¤ÎJSON¥Ç¡¼¥¿¤òJavaScript¤Î¤ß¤Ç¼èÆÀ¡¢Áàºî¤Ç¤­¤ë¤³¤È¡¢¤È¤Ê¤ê¤Þ¤¹¡£

¤Ç¤¹¤«¤é¡¢JSONP¤òÅǤ¯¥µ¡¼¥Ó¥¹¤¬Ä󶡤µ¤ì¤ì¤Ð¡¢¸å¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ÎJavaScript¤¬Ä󶡤µ¤ì¤ë¥Ç¡¼¥¿¤òÍÍ¡¹¤ËÁȤ߹ç¤ï¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¤¹¡£¤·¤«¤â¡¢JSON·Á¼°¤Ê¤Î¤ÇÁàºî¤â´Êñ¤È¤¤¤¦¤ï¤±¤Ç¤¹¡£

[edit]

»²¹Í

Åê¹Æ¼Ô¿ÊÃÏ? | ¥Ñ¡¼¥Þ¥ê¥ó¥¯?

| append.gif

tag: PukiWiki?, JSON?, JSONP?, Ajax


¥È¥Ã¥×   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS

¥¢¡¼¥¯¥¦¥§¥Ö¤Î¥µ¡¼¥Ó¥¹¤ä¥½¥ê¥å¡¼¥·¥ç¥ó¤Ï¤³¤Á¤é