Avatar billede xcover Nybegynder
25. april 2010 - 16:49 Der er 1 løsning

Fra PHP til ASP (XML)

Hejsa,

Jeg har købt en service, som tillader mig at benytte API til at
modtage data.
Så vidt jeg forstår fungere det ved at jeg kan sende noget XML
til deres server - som derefter returnere et svar.

Men deres API eksempel er kun lavet i PHP, og derfor vil jeg
gerne høre om nogle af jer kan forklare mig hvad scriptet gør ?
Og evt. et hint så jeg kan få det bygget i ASP ?

Her er php koden (med fiktive url´s):
--------------------------------------------------------
<?php
$api_host = "domain.org";
$api_port = 474;
$authcode = "mypass";

$res = fsockopen("tls://" . $api_host, $api_port);
stream_set_blocking($res, 0);

function build_request($content) {
$namespace = "http://www.url.org/ns";
$doc = $content->ownerDocument;
$whapi = $doc->createElement("whapi");
$whapi->setAttribute("xmlns", $namespace);
$doc->appendChild($whapi);

$c = $doc->createElement('command');
$whapi->appendChild($c);
$c->appendChild($content);

$output = $doc->saveXML();
return $output;
}

function send_request($output) {
global $res;
fwrite($res, $output);
$content = "";
while(true) {
$part = fread($res, 8192);
$content.=$part;
if(preg_match('/<\/whapi>/', $content)) break;
}
if($content) {
$result=array();
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $content, $result);
return $result;
} else {
// Error handling
throw new Exception("Invalid XML received: " . $content);
}
}

function build_login($authcode) {
$doc = new DOMDocument();
$content = $doc->createElement("log-in");
$authcode_element = $doc->createElement('authcode');

$authcode_element->appendChild($doc->createTextNode($authcode));
$content->appendChild($authcode_element);
return $content;
}

function parse_reason($result) {
foreach($result as $tag)
if($tag['tag']=="reason")
return $tag['attributes']['code'] . ":" . $tag['value'];
}

function handle_login_result($result) {
foreach($result as $tag) {
if($tag['tag']=="result" && $tag['type']!="close" &&
$tag['attributes']['code']!=1)
throw new Exception("Failed to log in!: " .
parse_reason($result));
if($tag['tag']=="session-id") return $tag['value'];
}
}

try {
$content = build_login($authcode);
$xml = build_request($content);
$result = send_request($xml);
$session_id = handle_login_result($result);

$doc = new DOMDocument();
$content =
$doc->createElementNS("http://www.url.org/packages", "list");
$xml = build_request($content);
$result = send_request($xml);

$target_level = 0;
foreach($result as $tag) {
if($tag['tag']=="result" && $tag['type']!="close" &&
$tag['attributes']['code']!=1)
throw new Exception("Failed to list packages: " .
parse_reason($result));

if($target_level) {
if($tag['level']<=$target_level and
$tag['type']=='close') {
$target_level=0;
echo $package_id . " ". $domain_name . "<br/>";
} else {
if($tag['tag']=="package:package-id") $package_id =
$tag['value'];
else if($tag['tag']=="domain-name") $domain_name =
$tag['value'];
}
}

if($tag['tag']=="package:package") $target_level =
$tag['level'];
}

} catch(Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}

fclose($res);

?>
--------------------------------------------------------

Med i manualen er også et XML eksempel:
--------------------------------------------------------
<?xml version="1.0"?>
<whapi xmlns="http://www.url.org/ns"
xmlns:package="http://www.url.org/packages">
<command>
<package:list/>
</command>
</whapi>
--------------------------------------------------------

Jeg er vare helt blank på hvordan jeg får afsendt det XML via ASP
og derefter modtage resultatet.

Håber i kan hjælpe mig :-) På forhånd takker.
Avatar billede xcover Nybegynder
25. april 2010 - 19:45 #1
Lukker denne da jeg har fået lavet noget af ASP versionen.
Det virker dog ikke helt: http://www.eksperten.dk/spm/908016
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester