2011-07-27 4 views
2

drupalサイトにdrupal以外のサイトからノードを作成しようとしていますが、私の人生では動作しません。 drupalサービス以外のサイトからdrupal services node.saveを使用するにはどうすればいいですか?

この

は...

$domain = 'http://mydomain.com'; 
$operation = 'node.save'; 
$api_key = 'my api key'; 
$timestamp = (string) time(); 
$nonce = substr(md5(uniqid('s', true)), 0, 10); 
$hash = hash_hmac('sha256', $timestamp .';'.$domain .';'. $nonce .';'.$operation, $api_key); 

$node_data = array(
'type'  => 'story', 
'title'  => 'test story title', 
'body'  => 'test story text' 
); 

$send_data = array(
    'method' => $operation, 
    'args' => array(
     'hash'    => $hash, 
     'domain_name'  => $domain, 
     'domain_time_stamp' => $timestamp, 
     'nonce'    => $nonce, 
     'node'    => serialize($node_data) 
) 
); 

$request = xmlrpc_encode_request($operation, $send_data); 

$context = stream_context_create(
    array(
    'http' => array(
     'method' => "POST", 
     'header' => "Content-Type: text/xml", 
     'content' => $request 
    ) 
) 
); 

$retrieve = file_get_contents($domain .'/services/xmlrpc', false, $context); 
$response = xmlrpc_decode($retrieve); 

echo '<pre>'. htmlspecialchars(print_r($response, 1)) .'</pre>'; 

私の周りグーグルから構築したコードですが、オールズは、私は戻って、サーバーから取得されます。「必要な引数がありません:ノード」を、そしてI'maはいまいましいことを渡しますたわごと...

私は大丈夫だと感じるようにする "system.connect"レスポンスを得ることができますが、それはすべて私が得ることができます。私のサービス設定では、session_idは必要ありません。

私はStackOverflowの助け...あなたは私の唯一の希望

答えて

0

だあなたがセッションIDを使用する必要がありそうです。セッションIDを返す 'system.connect'メソッドを実行し、それをパラメータとしてnode.saveに渡します。

2

サービス7.x-3.0-rc1以上を使用している場合は、サンプルスクリプトMichaelColeここをクリックhttp://drupal.org/node/910598#comment-4677738

私はここで彼のコードをStackOverflowユーザーのためにもう一度書いています。

//--------------login to the server------------------------ 
$service_url = 'http://example.dev/rest/user/login.xml'; // .xml asks for xml data in response 
$post_data = array(
    'username' => 'test', 
    'password' => 'test', 
); 
$post_data = http_build_query($post_data, '', '&'); // Format post data as application/x-www-form-urlencoded 
// set up the request 
$curl = curl_init($service_url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // have curl_exec return a string 

curl_setopt($curl, CURLOPT_POST, true);    // do a POST 
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // POST this data 
// make the request 
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line 
$response = curl_exec($curl); 
curl_close($curl); 
print "LOGIN RESPONSE:\n"; 
var_dump($response); 



// parse the response 
$xml = new SimpleXMLElement($response); 
$session_cookie = $xml->session_name . '=' . $xml->sessid; 
// print "SESSION_COOKIE: $session_cookie"; 

file_put_contents('session_cookie.txt', $session_cookie); 

//----------------create a node ------------------------------- 

$node_data = array(
    'type' => 'ct_metadata_core', 
    'title' => 'test layer', 
    'field_core_lat_n[und][0]' => array('value' => '90'), 
    'field_core_lat_s[und][0]' => array('value' => '-90'), 
    'field_core_long_e[und][0]' => array('value' => '180'), 
    'field_core_long_w[und][0]' => array('value' => '-180'), 
    'field_core_description[und][0]' => array('value' => 'National Data Buoy Center'), 
    'field_core_originator[und][0]' => array('value' => 'NDBC'), 
    'field_core_url[und][0]' => array('url' => 'http://www.ndbc.noaa.gov/kml/marineobs_as_kml.php?sort=pgm'), 
    'field_cont_res_name_org[und][0]' => array('value' => 'test'), 

); 


$service_url = 'http://example.dev/rest/node'; // .xml asks for xml data in response 
$session_cookie = file_get_contents('session_cookie.txt'); 

$node_data = http_build_query($node_data, '', '&'); // Format post data as application/x-www-form-urlencoded 
// set up the request 
$curl = curl_init($service_url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // have curl_exec return a string 

curl_setopt($curl, CURLOPT_COOKIE, "$session_cookie"); // use the previously saved session 

curl_setopt($curl, CURLOPT_POST, true);    // do a POST 
curl_setopt($curl, CURLOPT_POSTFIELDS, $node_data); // POST this data 
// make the request 
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line 
$response = curl_exec($curl); 
curl_close($curl); 
print "CREATE NODE RESPONSE:\n"; 
var_dump($response); 


//----------------logout from the server------------------------- 

$service_url = 'http://example.dev/rest/user/logout'; 
$session_cookie = file_get_contents('session_cookie.txt'); 

// set up the request 
$curl = curl_init($service_url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // have curl_exec return a string 

curl_setopt($curl, CURLOPT_COOKIE, "$session_cookie"); // use the previously saved session 
curl_setopt($curl, CURLOPT_POST, true);    // do a POST 
curl_setopt($curl, CURLOPT_POSTFIELDS, ""); // POST this data 
// make the request 
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line 
$response = curl_exec($curl); 
curl_close($curl); 
print "LOGOUT RESPONSE:\n"; 
var_dump($response); 
関連する問題