Warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache' query: UPDATE cache SET data = 'a:402:{s:13:\"theme_default\";s:4:\"kewl\";s:13:\"filter_html_1\";s:1:\"1\";s:18:\"node_options_forum\";a:1:{i:0;s:6:\"status\";}s:18:\"drupal_private_key\";s:64:\"a5de3144cabd3a5a76889cdc7d52a5656ec758dd9c66b720824755fe28d5dc59\";s:10:\"menu_masks\";a:24:{i:0;i:127;i:1;i:63;i:2;i:62;i:3;i:61;i:4;i:59;i:5;i:58;i:6;i:57;i:7;i:56;i:8;i:31;i:9;i:30;i:10;i:29;i:11;i:28;i:12;i:24;i:13;i:21;i:14;i:15;i:15;i:14;i:16;i:12;i:17;i:11;i:18;i:7;i:19;i:6;i:20;i:5;i:21;i:3;i:22;i:2;i:23;i:1;}s:12:\"install_task\";s:4:\"done\";s:13:\"menu_expanded\";a:2:{i:0;s:15:\"menu-categories\";i:1;s:10:\"navigation\";}s:9:\"site_name\";s:7:\"jide.fr\";s:9:\"site_mail\";s:17:\"jide.fr@gmail.com\";s:21:\"date_defa in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:7720:\"UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_filter'\nquery: UPDATE cache_filter SET data = '<p>Recently, I had to use Facebook API for a web site using social networks. When testing these APIs, having test accounts is necessary. Facebook provides an API to create, delete and modify these friends. Here is a handy code snippet which makes it easy to batch create, delete, list test accounts and connect them as friends.</p>\\n<p>A zipped version is attached below.&a in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:6490:\"UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_views_data'\nquery: UPDATE cache_views_data SET data = 'a:3:{s:6:\\"result\\";a:74:{i:0;O:8:\\"stdClass\\":1:{s:3:\\"nid\\";s:1:\\"4\\";}i:1;O:8:\\"stdClass\\":1:{s:3:\\"nid\\";s:1:\\"2\\";}i:2;O:8:\\"stdClass\\":1:{s:3:\\"nid\\";s:2:\\"47\\";}i:3;O:8:\\"stdClass\\" in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:6303:\"UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_views_data'\nquery: UPDATE cache_views_data SET data = 'a:4:{s:4:\\"head\\";s:0:\\"\\";s:3:\\"css\\";a:0:{}s:2:\\"js\\";a:0:{}s:6:\\"output\\";s:3576:\\"<div class=\\"view view-tagadelic view-id-tagadelic view-display-id-block_1 view-dom-id-1\\">\\n \\n \\n \\n <div class=\\"view-content\\"&gt in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:6291:\"UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_block'\nquery: UPDATE cache_block SET data = 'a:2:{s:7:\\"content\\";s:3576:\\"<div class=\\"view view-tagadelic view-id-tagadelic view-display-id-block_1 view-dom-id-1\\">\\n \\n \\n \\n <div class=\\"view-content\\">\\n <div class=\\"tagadelic_views\\"><a href=\\"/english/android-0\\" class=\\& in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:409:\"UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_filter'\nquery: UPDATE cache_filter SET data = '<p>Follow me : <a href=\\"http://twitter.com/jidefr\\">jidefr</a></p>\\n', created = 1513169192, expire = 1513255592, headers = '', serialized = 0 WHERE cid = '1:fb82f31c75d9dcc2908dc560fa3f9280'\";s:5:\"%file\";s:37:\"/home/jideretu/www/includes/cache.inc\";s:5:\"%li in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:1006:\"UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_views_data'\nquery: UPDATE cache_views_data SET data = 'a:3:{s:6:\\"result\\";a:1:{i:0;O:8:\\"stdClass\\":3:{s:10:\\"twitter_id\\";s:18:\\"937070315510861824\\";s:12:\\"twitter_text\\";s:143:\\"RT @PhilippeCorbe: Si vous avez du mal à comprendre l\\'affaire russe, et l\\'importance de l\\'information du jour, le plaider coupable de l\\ in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:2330:\"UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_views_data'\nquery: UPDATE cache_views_data SET data = 'a:4:{s:4:\\"head\\";s:0:\\"\\";s:3:\\"css\\";a:0:{}s:2:\\"js\\";a:3:{i:0;a:5:{i:0;s:38:\\"sites/default/modules/views/js/base.js\\";i:1;s:6:\\"module\\";i:2;s:6:\\"header\\";i:3;b:0;i:4;b:1;}i:1;a:5:{i:0;s:43:\\"sites/default/modules/views/js/ajax_view.js\\";i:1;s in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:676:\"UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_block'\nquery: UPDATE cache_block SET data = 'a:2:{s:7:\\"subject\\";s:15:\\"Recent Comments\\";s:7:\\"content\\";s:187:\\"<div id=\\"dsq-recentcomments\\" class=\\"dsq-widget\\"><script type=\\"text/javascript\\" src=\\"http://disqus.com/forums/jide/recent_comments_widget.js?num_items=1&hide_avatars=1\\& in /home/jideretu/www/includes/database.mysql.inc on line 135
Easily manage test accounts for Facebook app developers | jide.fr

Easily manage test accounts for Facebook app developers

  • user warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_filter' query: UPDATE cache_filter SET data = '<p>Recently, I had to use Facebook API for a web site using social networks. When testing these APIs, having test accounts is necessary. Facebook provides an API to create, delete and modify these friends. Here is a handy code snippet which makes it easy to batch create, delete, list test accounts and connect them as friends.</p>\n<p>A zipped version is attached below.</p>\n<p><code>&lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"&gt;<br />\n&lt;html&gt;<br />\n &lt;head&gt;<br />\n &lt;title&gt;Facebook test users&lt;/title&gt;<br />\n &lt;/head&gt;<br />\n &lt;body&gt;<br />\n &lt;ul&gt;<br />\n &lt;li&gt;&lt;a href=\"/\"&gt;Home&lt;/a&gt;&lt;/li&gt;<br />\n &lt;li&gt;Create test users<br />\n &lt;ul&gt;<br />\n &lt;li&gt;&lt;a href=\"?op=create&amp;amount=1\"&gt;1&lt;/a&gt;&lt;/li&gt;<br />\n &lt;li&gt;&lt;a href=\"?op=create&amp;amount=10\"&gt;10&lt;/a&gt;&lt;/li&gt;<br />\n &lt;li&gt;&lt;a href=\"?op=create&amp;amount=50\"&gt;50&lt;/a&gt;&lt;/li&gt;<br />\n &lt;li&gt;&lt;a href=\"?op=create&amp;amount=99\"&gt;99 (max)&lt;/a&gt;&lt;/li&gt;<br />\n &lt;/ul&gt;<br />\n &lt;/li&gt;<br />\n &lt;li&gt;&lt;a href=\"?op=list\"&gt;List test users&lt;/a&gt;&lt;/li&gt;<br />\n &lt;li&gt;&lt;a href=\"?op=friends\"&gt;Make test users friends&lt;/a&gt;&lt;/li&gt;<br />\n &lt;li&gt;&lt;a href=\"?op=delete\"&gt;Delete all test users&lt;/a&gt;&lt;/li&gt;<br />\n &lt;/ul&gt;<br />\n &lt;pre&gt;<br />\n&lt;?php<br />\nif (isset($_GET[\'op\'])) {<br />\n require_once(\'facebook.php\');<br />\n $app_id = \'YOUR_APP_ID\';<br />\n $secret = \'YOUR_SECRET_KEY\';<br />\n $facebook = new Facebook(array(<br />\n \'appId\' =&gt; $app_id,<br />\n \'secret\' =&gt; $secret,<br />\n \'cookie\' =&gt; true,<br />\n ));<br />\n $session = $facebook-&gt;getSession();<br />\n $data = file_get_contents(\"https://graph.facebook.com/oauth/access_token?type=client_cred&amp;client_id=$app_id&amp;client_secret=$secret&amp;redirect_uri=http://playground.localhost/\");<br />\n $access_token = str_replace(\'access_token=\', \'\', $data);<br />\n $attachment = array(\'access_token\' =&gt; $access_token);<br />\n $users = $facebook-&gt;api(\"/$app_id/accounts/test-users\", \'GET\', $attachment);<br />\n switch ($_GET[\'op\']) {<br />\n case \'create\':<br />\n $amount = (int) $_GET[\'amount\'];<br />\n if (!$amount) {<br />\n $amount = 10;<br />\n }<br />\n else if ($amount &gt; 99) {<br />\n $amount = 99;<br />\n }<br />\n for ($i=0; $i&lt;$amount; $i++) {<br />\n try {<br />\n $response = $facebook-&gt;api(\"/$app_id/accounts/test-users?installed=true&amp;permissions=read_friendlists,user_about_me,email\", \'POST\', $attachment);<br />\n print_r($response);<br />\n }<br />\n catch (Exception $e) {<br />\n print $e-&gt;getMessage().\"\\n\";<br />\n }<br />\n flush();<br />\n }<br />\n break;<br />\n case \'friends\':<br />\n $users = $facebook-&gt;api(\"/$app_id/accounts/test-users\", \'GET\', $attachment);<br />\n foreach ($users[\'data\'] as $user) {<br />\n foreach ($users[\'data\'] as $friend) {<br />\n if ($user[\'id\'] == $friend[\'id\']) {<br />\n continue;<br />\n }<br />\n try {<br />\n $response = $facebook-&gt;api(\"/\".$user[\'id\'].\"/friends/\".$friend[\'id\'], \'POST\', array(\'access_token\' =&gt; $user[\'access_token\']));<br />\n print \"Success: \".$response.\"\\n\";<br />\n print_r($user);<br />\n }<br />\n catch (Exception $e) {<br />\n print $e-&gt;getMessage() . \"\\n\";<br />\n }<br />\n try {<br />\n $response = $facebook-&gt;api(\"/\".$friend[\'id\'].\"/friends/\".$user[\'id\'], \'POST\', array(\'access_token\' =&gt; $friend[\'access_token\']));<br />\n print \"Success: \".$response.\"\\n\";<br />\n print_r($user);<br />\n }<br />\n catch (Exception $e) {<br />\n print $e-&gt;getMessage().\"\\n\";<br />\n }<br />\n flush();<br />\n }<br />\n }<br />\n break;<br />\n case \'list\':<br />\n try {<br />\n $response = $facebook-&gt;api(\"/$app_id/accounts/test-users\", \'GET\', $attachment);<br />\n print_r($response);<br />\n }<br />\n catch (Exception $e) {<br />\n print $e-&gt;getMessage().\"\\n\";<br />\n }<br />\n flush();<br />\n break;<br />\n case \'delete\':<br />\n $users = $facebook-&gt;api(\"/$app_id/accounts/test-users\", \'GET\', $attachment);<br />\n foreach ($users[\'data\'] as $user) {<br />\n try {<br />\n $response = $facebook-&gt;api(\"/\".$user[\'id\'], \'DELETE\', array(\'access_token\' =&gt; $user[\'access_token\']));<br />\n print \"Success: \".$response.\"\\n\";<br />\n }<br />\n catch (Exception $e) {<br />\n print $e-&gt;getMessage().\"\\n\";<br />\n }<br />\n flush();<br />\n }<br />\n break;<br />\n default:<br />\n print \'Please choose an operation\';<br />\n }<br />\n}<br />\n?&gt;<br />\n &lt;/pre&gt;<br />\n &lt;/body&gt;<br />\n&lt;/html&gt;</code></p>\n', created = 1513169192, expire = 1513255592, headers = '', serialized = 0 WHERE cid = '1:0b979455b2520408de6729beed29d898' in /home/jideretu/www/includes/cache.inc on line 112.
  • user warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_views_data' query: UPDATE cache_views_data SET data = 'a:3:{s:6:\"result\";a:74:{i:0;O:8:\"stdClass\":1:{s:3:\"nid\";s:1:\"4\";}i:1;O:8:\"stdClass\":1:{s:3:\"nid\";s:1:\"2\";}i:2;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"47\";}i:3;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"48\";}i:4;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"54\";}i:5;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"60\";}i:6;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"62\";}i:7;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"63\";}i:8;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"65\";}i:9;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"67\";}i:10;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"69\";}i:11;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"72\";}i:12;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"74\";}i:13;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"76\";}i:14;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"78\";}i:15;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"80\";}i:16;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"83\";}i:17;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"84\";}i:18;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"87\";}i:19;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"90\";}i:20;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"92\";}i:21;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"94\";}i:22;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"95\";}i:23;O:8:\"stdClass\":1:{s:3:\"nid\";s:2:\"98\";}i:24;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"100\";}i:25;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"101\";}i:26;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"104\";}i:27;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"106\";}i:28;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"108\";}i:29;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"110\";}i:30;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"111\";}i:31;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"113\";}i:32;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"118\";}i:33;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"119\";}i:34;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"121\";}i:35;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"124\";}i:36;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"126\";}i:37;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"128\";}i:38;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"130\";}i:39;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"132\";}i:40;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"134\";}i:41;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"135\";}i:42;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"138\";}i:43;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"142\";}i:44;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"144\";}i:45;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"145\";}i:46;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"147\";}i:47;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"149\";}i:48;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"151\";}i:49;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"153\";}i:50;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"155\";}i:51;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"158\";}i:52;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"159\";}i:53;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"161\";}i:54;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"163\";}i:55;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"165\";}i:56;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"167\";}i:57;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"169\";}i:58;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"171\";}i:59;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"173\";}i:60;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"187\";}i:61;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"188\";}i:62;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"190\";}i:63;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"192\";}i:64;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"194\";}i:65;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"200\";}i:66;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"203\";}i:67;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"205\";}i:68;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"208\";}i:69;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"209\";}i:70;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"211\";}i:71;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"213\";}i:72;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"215\";}i:73;O:8:\"stdClass\":1:{s:3:\"nid\";s:3:\"217\";}}s:10:\"total_rows\";i:74;s:5:\"pager\";a:5:{s:9:\"use_pager\";b:0;s:14:\"items_per_page\";i:0;s:7:\"element\";i:0;s:6:\"offset\";i:0;s:12:\"current_page\";i:0;}}', created = 1513169192, expire = 1513172792, headers = '', serialized = 1 WHERE cid = 'tagadelic:block_1:results:e95417a84dd0b10d3ce7de97e90f7660' in /home/jideretu/www/includes/cache.inc on line 112.
  • user warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_views_data' query: UPDATE cache_views_data SET data = 'a:4:{s:4:\"head\";s:0:\"\";s:3:\"css\";a:0:{}s:2:\"js\";a:0:{}s:6:\"output\";s:3576:\"<div class=\"view view-tagadelic view-id-tagadelic view-display-id-block_1 view-dom-id-1\">\n \n \n \n <div class=\"view-content\">\n <div class=\"tagadelic_views\"><a href=\"/english/android-0\" class=\"tagadelic level1\" rel=\"tag\">android</a> \n<a href=\"/english/apache-0\" class=\"tagadelic level1\" rel=\"tag\">Apache</a> \n<a href=\"/english/automator-0\" class=\"tagadelic level1\" rel=\"tag\">Automator</a> \n<a href=\"/english/bootstrap-0\" class=\"tagadelic level3\" rel=\"tag\">bootstrap</a> \n<a href=\"/english/canal-0\" class=\"tagadelic level1\" rel=\"tag\">canal +</a> \n<a href=\"/english/command-line-0\" class=\"tagadelic level1\" rel=\"tag\">Command line</a> \n<a href=\"/english/css\" class=\"tagadelic level1\" rel=\"tag\">CSS</a> \n<a href=\"/english/css-0\" class=\"tagadelic level1\" rel=\"tag\">CSS</a> \n<a href=\"/english/customize-0\" class=\"tagadelic level1\" rel=\"tag\">customize</a> \n<a href=\"/english/drupal-0\" class=\"tagadelic level5\" rel=\"tag\">Drupal</a> \n<a href=\"/english/drupal\" class=\"tagadelic level2\" rel=\"tag\">Drupal</a> \n<a href=\"/english/dwmapi-0\" class=\"tagadelic level1\" rel=\"tag\">Dwmapi</a> \n<a href=\"/english/facebook-0\" class=\"tagadelic level1\" rel=\"tag\">Facebook</a> \n<a href=\"/english/finder-0\" class=\"tagadelic level1\" rel=\"tag\">Finder</a> \n<a href=\"/english/freshy-0\" class=\"tagadelic level1\" rel=\"tag\">freshy</a> \n<a href=\"/english/game-0\" class=\"tagadelic level1\" rel=\"tag\">game</a> \n<a href=\"/english/git-0\" class=\"tagadelic level1\" rel=\"tag\">GIT</a> \n<a href=\"/english/github-0\" class=\"tagadelic level1\" rel=\"tag\">github</a> \n<a href=\"/english/grunt-0\" class=\"tagadelic level1\" rel=\"tag\">grunt</a> \n<a href=\"/english/html\" class=\"tagadelic level1\" rel=\"tag\">HTML</a> \n<a href=\"/english/javascript-0\" class=\"tagadelic level2\" rel=\"tag\">javascript</a> \n<a href=\"/english/jidefr-0\" class=\"tagadelic level1\" rel=\"tag\">jide.fr</a> \n<a href=\"/english/jquery\" class=\"tagadelic level1\" rel=\"tag\">jQuery</a> \n<a href=\"/english/jquery-ui\" class=\"tagadelic level2\" rel=\"tag\">jQuery UI</a> \n<a href=\"/english/lamp\" class=\"tagadelic level1\" rel=\"tag\">LAMP</a> \n<a href=\"/english/le-moteur-de-recherche-0\" class=\"tagadelic level1\" rel=\"tag\">le moteur de recherche</a> \n<a href=\"/english/less-0\" class=\"tagadelic level2\" rel=\"tag\">less</a> \n<a href=\"/english/mac-os-x-0\" class=\"tagadelic level1\" rel=\"tag\">Mac OS X</a> \n<a href=\"/english/made-in-france-0\" class=\"tagadelic level1\" rel=\"tag\">made in france</a> \n<a href=\"/english/mobile-0\" class=\"tagadelic level1\" rel=\"tag\">mobile</a> \n<a href=\"/english/mongo-db-0\" class=\"tagadelic level1\" rel=\"tag\">mongo db</a> \n<a href=\"/english/mysql-0\" class=\"tagadelic level1\" rel=\"tag\">MySQL</a> \n<a href=\"/english/nodejs-0\" class=\"tagadelic level1\" rel=\"tag\">nodejs</a> \n<a href=\"/english/openlayers\" class=\"tagadelic level1\" rel=\"tag\">Openlayers</a> \n<a href=\"/english/php-0\" class=\"tagadelic level2\" rel=\"tag\">PHP</a> \n<a href=\"/english/qt-0\" class=\"tagadelic level1\" rel=\"tag\">Qt</a> \n<a href=\"/english/queue-api-0\" class=\"tagadelic level1\" rel=\"tag\">Queue API</a> \n<a href=\"/english/ruby-0\" class=\"tagadelic level1\" rel=\"tag\">Ruby</a> \n<a href=\"/english/rules-0\" class=\"tagadelic level1\" rel=\"tag\">Rules</a> \n<a href=\"/english/vagrant\" class=\"tagadelic level1\" rel=\"tag\">Vagrant</a> \n<a href=\"/english/views\" class=\"tagadelic level1\" rel=\"tag\">Views</a> \n<a href=\"/english/windows-api-0\" class=\"tagadelic level1\" rel=\"tag\">Windows API</a> \n<a href=\"/english/wordpress\" class=\"tagadelic level3\" rel=\"tag\">wordpress</a> \n<a href=\"/english/wordpress-0\" class=\"tagadelic level6\" rel=\"tag\">wordpress</a> \n</div> </div>\n \n \n \n \n \n \n</div> \";}', created = 1513169192, expire = 1513172792, headers = '', serialized = 1 WHERE cid = 'tagadelic:block_1:output:f9d44744f2ad14e08a7fcb35fd44c428' in /home/jideretu/www/includes/cache.inc on line 112.
  • user warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_block' query: UPDATE cache_block SET data = 'a:2:{s:7:\"content\";s:3576:\"<div class=\"view view-tagadelic view-id-tagadelic view-display-id-block_1 view-dom-id-1\">\n \n \n \n <div class=\"view-content\">\n <div class=\"tagadelic_views\"><a href=\"/english/android-0\" class=\"tagadelic level1\" rel=\"tag\">android</a> \n<a href=\"/english/apache-0\" class=\"tagadelic level1\" rel=\"tag\">Apache</a> \n<a href=\"/english/automator-0\" class=\"tagadelic level1\" rel=\"tag\">Automator</a> \n<a href=\"/english/bootstrap-0\" class=\"tagadelic level3\" rel=\"tag\">bootstrap</a> \n<a href=\"/english/canal-0\" class=\"tagadelic level1\" rel=\"tag\">canal +</a> \n<a href=\"/english/command-line-0\" class=\"tagadelic level1\" rel=\"tag\">Command line</a> \n<a href=\"/english/css\" class=\"tagadelic level1\" rel=\"tag\">CSS</a> \n<a href=\"/english/css-0\" class=\"tagadelic level1\" rel=\"tag\">CSS</a> \n<a href=\"/english/customize-0\" class=\"tagadelic level1\" rel=\"tag\">customize</a> \n<a href=\"/english/drupal-0\" class=\"tagadelic level5\" rel=\"tag\">Drupal</a> \n<a href=\"/english/drupal\" class=\"tagadelic level2\" rel=\"tag\">Drupal</a> \n<a href=\"/english/dwmapi-0\" class=\"tagadelic level1\" rel=\"tag\">Dwmapi</a> \n<a href=\"/english/facebook-0\" class=\"tagadelic level1\" rel=\"tag\">Facebook</a> \n<a href=\"/english/finder-0\" class=\"tagadelic level1\" rel=\"tag\">Finder</a> \n<a href=\"/english/freshy-0\" class=\"tagadelic level1\" rel=\"tag\">freshy</a> \n<a href=\"/english/game-0\" class=\"tagadelic level1\" rel=\"tag\">game</a> \n<a href=\"/english/git-0\" class=\"tagadelic level1\" rel=\"tag\">GIT</a> \n<a href=\"/english/github-0\" class=\"tagadelic level1\" rel=\"tag\">github</a> \n<a href=\"/english/grunt-0\" class=\"tagadelic level1\" rel=\"tag\">grunt</a> \n<a href=\"/english/html\" class=\"tagadelic level1\" rel=\"tag\">HTML</a> \n<a href=\"/english/javascript-0\" class=\"tagadelic level2\" rel=\"tag\">javascript</a> \n<a href=\"/english/jidefr-0\" class=\"tagadelic level1\" rel=\"tag\">jide.fr</a> \n<a href=\"/english/jquery\" class=\"tagadelic level1\" rel=\"tag\">jQuery</a> \n<a href=\"/english/jquery-ui\" class=\"tagadelic level2\" rel=\"tag\">jQuery UI</a> \n<a href=\"/english/lamp\" class=\"tagadelic level1\" rel=\"tag\">LAMP</a> \n<a href=\"/english/le-moteur-de-recherche-0\" class=\"tagadelic level1\" rel=\"tag\">le moteur de recherche</a> \n<a href=\"/english/less-0\" class=\"tagadelic level2\" rel=\"tag\">less</a> \n<a href=\"/english/mac-os-x-0\" class=\"tagadelic level1\" rel=\"tag\">Mac OS X</a> \n<a href=\"/english/made-in-france-0\" class=\"tagadelic level1\" rel=\"tag\">made in france</a> \n<a href=\"/english/mobile-0\" class=\"tagadelic level1\" rel=\"tag\">mobile</a> \n<a href=\"/english/mongo-db-0\" class=\"tagadelic level1\" rel=\"tag\">mongo db</a> \n<a href=\"/english/mysql-0\" class=\"tagadelic level1\" rel=\"tag\">MySQL</a> \n<a href=\"/english/nodejs-0\" class=\"tagadelic level1\" rel=\"tag\">nodejs</a> \n<a href=\"/english/openlayers\" class=\"tagadelic level1\" rel=\"tag\">Openlayers</a> \n<a href=\"/english/php-0\" class=\"tagadelic level2\" rel=\"tag\">PHP</a> \n<a href=\"/english/qt-0\" class=\"tagadelic level1\" rel=\"tag\">Qt</a> \n<a href=\"/english/queue-api-0\" class=\"tagadelic level1\" rel=\"tag\">Queue API</a> \n<a href=\"/english/ruby-0\" class=\"tagadelic level1\" rel=\"tag\">Ruby</a> \n<a href=\"/english/rules-0\" class=\"tagadelic level1\" rel=\"tag\">Rules</a> \n<a href=\"/english/vagrant\" class=\"tagadelic level1\" rel=\"tag\">Vagrant</a> \n<a href=\"/english/views\" class=\"tagadelic level1\" rel=\"tag\">Views</a> \n<a href=\"/english/windows-api-0\" class=\"tagadelic level1\" rel=\"tag\">Windows API</a> \n<a href=\"/english/wordpress\" class=\"tagadelic level3\" rel=\"tag\">wordpress</a> \n<a href=\"/english/wordpress-0\" class=\"tagadelic level6\" rel=\"tag\">wordpress</a> \n</div> </div>\n \n \n \n \n \n \n</div> \";s:7:\"subject\";s:4:\"Tags\";}', created = 1513169192, expire = -1, headers = '', serialized = 1 WHERE cid = 'views:tagadelic-block_1:kewl:en:http://jide.fr/english/easily-manage-test-accounts-for-facebook-app-developers' in /home/jideretu/www/includes/cache.inc on line 112.
  • user warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_filter' query: UPDATE cache_filter SET data = '<p>Follow me : <a href=\"http://twitter.com/jidefr\">jidefr</a></p>\n', created = 1513169192, expire = 1513255592, headers = '', serialized = 0 WHERE cid = '1:fb82f31c75d9dcc2908dc560fa3f9280' in /home/jideretu/www/includes/cache.inc on line 112.
  • user warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_views_data' query: UPDATE cache_views_data SET data = 'a:3:{s:6:\"result\";a:1:{i:0;O:8:\"stdClass\":3:{s:10:\"twitter_id\";s:18:\"937070315510861824\";s:12:\"twitter_text\";s:143:\"RT @PhilippeCorbe: Si vous avez du mal à comprendre l\'affaire russe, et l\'importance de l\'information du jour, le plaider coupable de l\'anc…\";s:20:\"twitter_created_time\";s:10:\"1512249947\";}}s:10:\"total_rows\";N;s:5:\"pager\";a:5:{s:9:\"use_pager\";s:1:\"0\";s:14:\"items_per_page\";i:1;s:7:\"element\";i:0;s:6:\"offset\";i:0;s:12:\"current_page\";i:0;}}', created = 1513169192, expire = 1513172792, headers = '', serialized = 1 WHERE cid = 'tweets:block:results:72324ccbb847e44714310307270aae76' in /home/jideretu/www/includes/cache.inc on line 112.
  • user warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_views_data' query: UPDATE cache_views_data SET data = 'a:4:{s:4:\"head\";s:0:\"\";s:3:\"css\";a:0:{}s:2:\"js\";a:3:{i:0;a:5:{i:0;s:38:\"sites/default/modules/views/js/base.js\";i:1;s:6:\"module\";i:2;s:6:\"header\";i:3;b:0;i:4;b:1;}i:1;a:5:{i:0;s:43:\"sites/default/modules/views/js/ajax_view.js\";i:1;s:6:\"module\";i:2;s:6:\"header\";i:3;b:0;i:4;b:1;}i:2;a:3:{i:0;a:1:{s:5:\"views\";a:2:{s:9:\"ajax_path\";s:19:\"/english/views/ajax\";s:9:\"ajaxViews\";a:1:{i:0;a:7:{s:9:\"view_name\";s:6:\"tweets\";s:15:\"view_display_id\";s:5:\"block\";s:9:\"view_args\";s:0:\"\";s:9:\"view_path\";s:8:\"node/155\";s:14:\"view_base_path\";N;s:11:\"view_dom_id\";i:2;s:13:\"pager_element\";i:0;}}}}i:1;s:7:\"setting\";i:2;s:6:\"header\";}}s:6:\"output\";s:732:\"<div class=\"view view-tweets view-id-tweets view-display-id-block view-dom-id-2\">\n \n \n \n <div class=\"view-content\">\n <div class=\"views-row views-row-1 views-row-odd views-row-first views-row-last\">\n \n <span class=\"views-field-text\">\n <span class=\"field-content\">RT <a target=\"_blank\" rel=\"nofollow\" href=\"http://twitter.com/PhilippeCorbe\">@PhilippeCorbe</a>: Si vous avez du mal à comprendre l\'affaire russe, et l\'importance de l\'information du jour, le plaider coupable de l\'anc…</span>\n </span>\n &#8212; \n <span class=\"views-field-created-time\">\n <span class=\"field-content\"><em>1 week 3 days</em> ago</span>\n </span>\n </div>\n </div>\n \n \n \n \n \n \n</div> \";}', created = 1513169192, expire = 1513172792, headers = '', serialized = 1 WHERE cid = 'tweets:block:output:7475b0b3516412a48129b88a1bae2ce5' in /home/jideretu/www/includes/cache.inc on line 112.
  • user warning: UPDATE command denied to user 'jideretumysql'@'10.0.66.38' for table 'cache_block' query: UPDATE cache_block SET data = 'a:2:{s:7:\"subject\";s:15:\"Recent Comments\";s:7:\"content\";s:187:\"<div id=\"dsq-recentcomments\" class=\"dsq-widget\"><script type=\"text/javascript\" src=\"http://disqus.com/forums/jide/recent_comments_widget.js?num_items=1&amp;hide_avatars=1\"></script></div>\";}', created = 1513169192, expire = -1, headers = '', serialized = 1 WHERE cid = 'disqus:disqus_recent_comments:kewl:en' in /home/jideretu/www/includes/cache.inc on line 112.

Recently, I had to use Facebook API for a web site using social networks. When testing these APIs, having test accounts is necessary. Facebook provides an API to create, delete and modify these friends. Here is a handy code snippet which makes it easy to batch create, delete, list test accounts and connect them as friends.

A zipped version is attached below.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title>Facebook test users</title>
</head>
<body>
<ul>
<li><a href="/">Home</a></li>
<li>Create test users
<ul>
<li><a href="?op=create&amount=1">1</a></li>
<li><a href="?op=create&amount=10">10</a></li>
<li><a href="?op=create&amount=50">50</a></li>
<li><a href="?op=create&amount=99">99 (max)</a></li>
</ul>
</li>
<li><a href="?op=list">List test users</a></li>
<li><a href="?op=friends">Make test users friends</a></li>
<li><a href="?op=delete">Delete all test users</a></li>
</ul>
<pre>
<?php
if (isset($_GET['op'])) {
require_once('facebook.php');
$app_id = 'YOUR_APP_ID';
$secret = 'YOUR_SECRET_KEY';
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $secret,
'cookie' => true,
));
$session = $facebook->getSession();
$data = file_get_contents("https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=$app_id&client_secret=$secret&redirect_uri=http://playground.localhost/");
$access_token = str_replace('access_token=', '', $data);
$attachment = array('access_token' => $access_token);
$users = $facebook->api("/$app_id/accounts/test-users", 'GET', $attachment);
switch ($_GET['op']) {
case 'create':
$amount = (int) $_GET['amount'];
if (!$amount) {
$amount = 10;
}
else if ($amount > 99) {
$amount = 99;
}
for ($i=0; $i<$amount; $i++) {
try {
$response = $facebook->api("/$app_id/accounts/test-users?installed=true&permissions=read_friendlists,user_about_me,email", 'POST', $attachment);
print_r($response);
}
catch (Exception $e) {
print $e->getMessage()."\n";
}
flush();
}
break;
case 'friends':
$users = $facebook->api("/$app_id/accounts/test-users", 'GET', $attachment);
foreach ($users['data'] as $user) {
foreach ($users['data'] as $friend) {
if ($user['id'] == $friend['id']) {
continue;
}
try {
$response = $facebook->api("/".$user['id']."/friends/".$friend['id'], 'POST', array('access_token' => $user['access_token']));
print "Success: ".$response."\n";
print_r($user);
}
catch (Exception $e) {
print $e->getMessage() . "\n";
}
try {
$response = $facebook->api("/".$friend['id']."/friends/".$user['id'], 'POST', array('access_token' => $friend['access_token']));
print "Success: ".$response."\n";
print_r($user);
}
catch (Exception $e) {
print $e->getMessage()."\n";
}
flush();
}
}
break;
case 'list':
try {
$response = $facebook->api("/$app_id/accounts/test-users", 'GET', $attachment);
print_r($response);
}
catch (Exception $e) {
print $e->getMessage()."\n";
}
flush();
break;
case 'delete':
$users = $facebook->api("/$app_id/accounts/test-users", 'GET', $attachment);
foreach ($users['data'] as $user) {
try {
$response = $facebook->api("/".$user['id'], 'DELETE', array('access_token' => $user['access_token']));
print "Success: ".$response."\n";
}
catch (Exception $e) {
print $e->getMessage()."\n";
}
flush();
}
break;
default:
print 'Please choose an operation';
}
}
?>
</pre>
</body>
</html>

AttachmentSize
fb-test-users.php_.zip1.63 KB

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:0:\"\";s:5:\"%file\";s:37:\"/home/jideretu/www/includes/cache.inc\";s:5:\"%line\";i:112;}', 3, '', 'http://jide.fr/english/easily-manage-test-accounts-for-facebook-app-developers', '', '54.242.205.33', 1513169192) in /home/jideretu/www/includes/database.mysql.inc on line 135

Warning: INSERT command denied to user 'jideretumysql'@'10.0.66.38' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:429:\"UPDATE command denied to user &#039;jideretumysql&#039;@&#039;10.0.66.38&#039; for table &#039;sessions&#039;\nquery: UPDATE sessions SET uid = 0, cache = 0, hostname = &#039;54.242.205.33&#039;, session = &#039;messages|a:1:{s:5:\\&quot;error\\&quot;;a:1:{i:0;s:68:\\&quot;user warning: in /home/jideretu/www/includes/cache.inc on line 112.\\&quot;;}}&#039;, timestamp = 1513169192 WHERE sid = &#039;4t92ht0qhekadimi7cr3m8fh67&#039;\";s:5:\"%file\";s:39:\"/home/jideretu/www/includes/session.inc\";s:5:\"%lin in /home/jideretu/www/includes/database.mysql.inc on line 135