在PHP中使用通过API的Delete调用

时间:2010-08-17 18:17:58

标签: php xml api

我们有一个由第三方开发者设计的wiki。我们遇到的问题是,已经“无效”的用户仍会出现在搜索中。阻止用户被看到的工作是删除与该用户相关联的属性。

要访问用户属性,我们会调用api传递url编码的用户名是这种格式:http://www.ourwiki.com/@api/users/=john_smith%40ourwiki.com/properties

然后,这将返回具有专有项目的XML。

下一步是我不确定如何继续。我们需要以某种方式遍历所有属性并获取属性的名称,以便我们可以删除它们通过API进行Delete调用。删除的格式为DELETE:users / {userid} / properties / {key}

理想情况下,一旦我们有了工作脚本,将用户名作为参数传递会很好。

我在使用PHP中的API方面有些新手,所以如果有人有一些想法或可以帮助解决这个问题,我将不胜感激。

请参阅此链接以下载属性xml文件: http://queencitytech.com/properties.zip

以下是撤消用户属性后返回的内容:

  

12010-04-29T04:39:29ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngJohnh2010-04-29T04:39:29ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngJohn2010-04 -29T04:39:29ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngSmith2010-04-29T04:39:30ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngSmith,   John2010-04-29T04:39:30ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngJohn2010-04-29T04:39:31ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.png757E2010-04-29T04: 39:31ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngExt:   61322010-04-29T04:39:31ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngJohn_Smith@ourwiki.com2010-04-29T04:39:32ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngmiddleware/图像/爆头/ 01_799 / 01_799_hs.jpg2010-04-29T04:39:32ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngmiddleware/images/lifestyle/01_799/01_799_ls.jpg2010-04-29T04:39:32ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp: //www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngImplementation2010-04-29T04:39:33ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngWeil,   T2010-04-29T04:39:33ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngCo-op2010-04-29T04:39:34ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.png0000-00- 00   00:00:002010-04-29T04:39:34ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngCoop2010-05-02T04:40:35ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.pngfalse2010- 05-03T19:09:34ZJohn_Smith @ ourwiki.comJohn_Smith @ ourwiki.comJohn_Smith @ ourwiki.com52909eac4d19209592168dc96f3d4fcahttp://www.avatar.com/avatar/52909eac4d19209592168dc96f3d4fca.pngCincinnati2010-05-14T04:15:13ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/头像/ 0ee8d636cdd5e57469516332b9325cbc.png4572010-07-16T04:50:13ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.png2010-07-14   16:06:232010-07-16T04:50:17ZAdminAdmin0ee8d636cdd5e57469516332b9325cbchttp://www.avatar.com/avatar/0ee8d636cdd5e57469516332b9325cbc.png

这是包含var_dump(array($ delete,$ property))的文件 http://queencitytech.com/deletescript.php.html

1 个答案:

答案 0 :(得分:0)

假设您的XML存储在变量名$xmlString中,而用户ID存储在变量$user_id中,您可以使用以下代码:

$delete = "http://www.ourwiki.com/@api/DELETE:users/$user_id/properties/%s";
$xml = new SimpleXMLElement($xmlString);

foreach($xml->property as $property) {
  $name = $property['name']; // the name is stored in the attribute
  file_get_contents(sprintf($delete, $name));
}

或者如果您知道所有可能的属性,那么拥有一个可以一次完成所有调用的函数会更容易,而无需事先读取属性。

$properties = array(); // array of property names
$delete = "http://www.ourwiki.com/@api/DELETE:users/$user_id/properties/%s";

foreach($properties as $property) {
  $name = $property['name'];
  file_get_contents(sprintf($delete, $name));
}