如何(使用PHP)使用管道从Phabricator获得差异

时间:2014-10-16 12:25:25

标签: api phabricator conduit

你能帮我讲一下如何使用导管在Phabricator中获得差异吗?

我正在尝试编写一个脚本,以根据不同的标准(例如状态,每用户等)从Phabricator获取差异列表。我已经看到有一个api连接到Phabricator的包名为conduit(https://secure.phabricator.com/book/phabdev/article/conduit/),但是虽然提供了一个ConduitClient类(https://secure.phabricator.com/diffusion/PHU/browse/master/src/conduit/ConduitClient.php $ 3),但没有给出关于使用它的方法的指示(该类依赖于一些外部类)。谢谢!

2 个答案:

答案 0 :(得分:2)

我想出了如何使用ConduitClient创建新任务。您应该能够使用相同的方法调用任何管道方法:

<?php
require_once '/your/path/to/phutil/src/__phutil_library_init__.php';

// first you need to connect:

$client = new ConduitClient('https://your_phabricator_instance');
$params = array(
  'certificate' => 'your conduit certificate from  https://your_phabricator_instance/settings/panel/conduit/',
  'client' => 'mytestclient',
  'clientVersion' => '1.0',
  'user' => 'your username',
  'host' => 'https://your_phabricator_instance'   // do not add path!
);
$client->callMethodSynchronous('conduit.connect', $params);


// then you can call methods:

$params = array(
  'title' => 'test task',
  'description' => 'test task'
);
$client->callMethodSynchronous('maniphest.createtask', $params);

使用正确的值替换require_once中的路径,证书,主机名和用户,它应该可以正常工作。 如果出现问题,您会收到详细信息的例外情况。

https://your-phabricator-instance/conduit

上的phabricator实例上提供了一个包含调用方法和可能参数的列表

哦,如果API返回了$client->callMethodSynchronous()返回的内容,那么您可以执行$result = $client->callMethodSynchronous(...)

之类的操作

答案 1 :(得分:1)

我的回答是基于rve的答案,所以他应该得到道具!

Phabricator的API发生了一些变化,因此conduit.connect必须进行调整。我的部分脚本如下所示:

$conduitSignature = 'your conduit certificate from  https://your_phabricator_instance/settings/panel/conduit/';
$clientName = 'bot-client';
$clientVersion = '1.0';
$clientUser = 'bot';
$authToken = time();
$authSignature = sha1( $authToken . $conduitSignature );

$client = new ConduitClient('https://your_phabricator_instance');
$params = array(
  'client' => $clientName,
  'clientVersion' => $clientVersion,
  'user' => $clientUser,
  'authToken' => $authToken,
  'authSignature' => $authSignature
);
$result = $client->callMethodSynchronous('conduit.connect', $params);