API xml php로 불러들이기 채택완료
제가 워크넷API 를 제 사이트에 연동하려는데
워크넷채용정보 채용목록은 출력이 되는데
https://openapi.work.go.kr/opi/opi/opia/wantedApiDetailVw.do
윗 페이지 채용상세는 아무 것도 출력이 안됩니다
뭐가 잘못된 건지 고수님께 여쭤봅니다
아래는 소스내용입니다
------------------------------------------------------
header("Content-Type: text/html; charset=UTF-8");
include "./xmlparser.php";
$url = 'http://openapi.work.go.kr/opi/opi/opia/wantedApi.do?authKey=************&callTp=D&returnType=XML &wantedAuthNo=K120032212140053&infoSvc=VALIDATION';
$ch = cURL_init(); curl_setopt($ch, CURLOPT_ENCODING, "UTF-8"); cURL_setopt($ch, CURLOPT_URL, $url); cURL_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = cURL_exec($ch); cURL_close($ch); $object = new XMLParser($response); $object->Parse(); echo "
"; print_r($object); echo "";
foreach ($object->stack as $obj) { echo "회사명 : " . $obj->corpNm . " "; echo "대표자명 : " . $obj->reperNm . " "; } ?>
---------------------------------------------------------------------
아래는 xmlparser.php 내용은
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
For Support, please visit http://www.criticaldevelopment.net/xml/ */
/**
* XML Parser Class (php4)
*
* Parses an XML document into an object structure much like the SimpleXML extension.
*
* @author Adam A. Flynn
/** * The XML document * * @var string */ var $xml;
/** * Document tag * * @var object */ var $document;
/** * Current object depth * * @var array */ var $stack; /** * Whether or not to replace dashes and colons in tag * names with underscores. * * @var bool */ var $cleanTagNames;
/** * Constructor. Loads XML document. * * @param string $xml The string of the XML document * @return XMLParser */ function XMLParser($xml = '', $cleanTagNames = true) { //Load XML document $this->xml = $xml;
// Set stack to an array $this->stack = array(); //Set whether or not to clean tag names $this->cleanTagNames = $cleanTagNames; }
/** * Initiates and runs PHP's XML parser */ function Parse() { //Create the parser resource $this->parser = xml_parser_create(); //Set the handlers xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, 'StartElement', 'EndElement'); xml_set_character_data_handler($this->parser, 'CharacterData');
//Error handling if (!xml_parse($this->parser, $this->xml)) $this->HandleError(xml_get_error_code($this->parser), xml_get_current_line_number($this->parser), xml_get_current_column_number($this->parser));
//Free the parser xml_parser_free($this->parser); } /** * Handles an XML parsing error * * @param int $code XML Error Code * @param int $line Line on which the error happened * @param int $col Column on which the error happened */ function HandleError($code, $line, $col) { trigger_error('XML Parsing Error at '.$line.':'.$col.'. Error '.$code.': '.xml_error_string($code)); }
/** * Gets the XML output of the PHP structure within $this->document * * @return string */ function GenerateXML() { return $this->document->GetXML(); }
/** * Gets the reference to the current direct parent * * @return object */ function GetStackLocation() { $return = '';
foreach($this->stack as $stack) $return .= $stack.'->'; return rtrim($return, '->'); }
/** * Handler function for the start of a tag * * @param resource $parser * @param string $name * @param array $attrs */ function StartElement($parser, $name, $attrs = array()) { //Make the name of the tag lower case $name = strtolower($name); //Check to see if tag is root-level if (count($this->stack) == 0) { //If so, set the document as the current tag $this->document = new XMLTag($name, $attrs);
//And start out the stack with the document tag $this->stack = array('document'); } //If it isn't root level, use the stack to find the parent else { //Get the name which points to the current direct parent, relative to $this $parent = $this->GetStackLocation(); //Add the child eval('$this->'.$parent.'->AddChild($name, $attrs, '.count($this->stack).', $this->cleanTagNames);'); //If the cleanTagName feature is on, replace colons and dashes with underscores if($this->cleanTagNames) $name = str_replace(array(':', '-'), '_', $name);
//Update the stack eval('$this->stack[] = $name.\'[\'.(count($this->'.$parent.'->'.$name.') - 1).\']\';'); } }
/** * Handler function for the end of a tag * * @param resource $parser * @param string $name */ function EndElement($parser, $name) { //Update stack by removing the end value from it as the parent array_pop($this->stack); }
/** * Handler function for the character data within a tag * * @param resource $parser * @param string $data */ function CharacterData($parser, $data) { //Get the reference to the current parent object $tag = $this->GetStackLocation();
//Assign data to it eval('$this->'.$tag.'->tagData .= trim($data);'); } }
/**
* XML Tag Object (php4)
*
* This object stores all of the direct children of itself in the $children array. They are also stored by
* type as arrays. So, if, for example, this tag had 2 tags as children, there would be a class member
* called $font created as an array. $font[0] would be the first font tag, and $font[1] would be the second.
*
* To loop through all of the direct children of this object, the $children member should be used.
*
* To loop through all of the direct children of a specific tag for this object, it is probably easier
* to use the arrays of the specific tag names, as explained above.
*
* @author Adam A. Flynn
return; } //Create the child object itself $child = new XMLTag($name, $attrs, $parents);
//If the cleanTagName feature is on, replace colons and dashes with underscores if($cleanTagName) $name = str_replace(array(':', '-'), '_', $name); //Toss up a notice if someone's trying to to use a colon or dash in a tag name elseif(strstr($name, ':') || strstr($name, '-')) trigger_error('Your tag named "'.$name.'" contains either a dash or a colon. Neither of these characters are friendly with PHP variable names, and, as such, they cannot be accessed and will cause the parser to not work. You must enable the cleanTagName feature (pass true as the second argument of the XMLParser constructor). For more details, see http://www.criticaldevelopment.net/xml/', E_USER_ERROR); //If there is no array already set for the tag name being added, //create an empty array for it if(!isset($this->$name)) $this->$name = array(); //Add the reference of it to the end of an array member named for the tag's name $this->{$name}[] =& $child; //Add the reference to the children array member $this->tagChildren[] =& $child; } /** * Returns the string of the XML document which would be generated from this object * * This function works recursively, so it gets the XML of itself and all of its children, which * in turn gets the XML of all their children, which in turn gets the XML of all thier children, * and so on. So, if you call GetXML from the document root object, it will return a string for * the XML of the entire document. * * This function does not, however, return a DTD or an XML version/encoding tag. That should be * handled by XMLParser::GetXML() * * @return string */ function GetXML() { //Start a new line, indent by the number indicated in $this->parents, add a <, and add the name of the tag $out = "\n".str_repeat("\t", $this->tagParents).'<'.$this->tagName;
//For each attribute, add attr="value" foreach($this->tagAttrs as $attr => $value) $out .= ' '.$attr.'="'.$value.'"'; //If there are no children and it contains no data, end it off with a /> if(empty($this->tagChildren) && empty($this->tagData)) $out .= " />"; //Otherwise... else { //If there are children if(!empty($this->tagChildren)) { //Close off the start tag $out .= '>'; //For each child, call the GetXML function (this will ensure that all children are added recursively) foreach($this->tagChildren as $child) { if(is_object($child)) $out .= $child->GetXML(); }
//Add the newline and indentation to go along with the close tag $out .= "\n".str_repeat("\t", $this->tagParents); } //If there is data, close off the start tag and add the data elseif(!empty($this->tagData)) $out .= '>'.$this->tagData; //Add the end tag $out .= ''.$this->tagName.'>'; } //Return the final output return $out; } /** * Deletes this tag's child with a name of $childName and an index * of $childIndex * * @param string $childName * @param int $childIndex */ function Delete($childName, $childIndex = 0) { //Delete all of the children of that child $this->{$childName}[$childIndex]->DeleteChildren(); //Destroy the child's value $this->{$childName}[$childIndex] = null; //Remove the child's name from the named array unset($this->{$childName}[$childIndex]); //Loop through the tagChildren array and remove any null //values left behind from the above operation for($x = 0; $x < count($this->tagChildren); $x ++) { if(is_null($this->tagChildren[$x])) unset($this->tagChildren[$x]); } } /** * Removes all of the children of this tag in both name and value */ function DeleteChildren() { //Loop through all child tags for($x = 0; $x < count($this->tagChildren); $x ++) { //Do this recursively $this->tagChildren[$x]->DeleteChildren(); //Delete the name and value $this->tagChildren[$x] = null; unset($this->tagChildren[$x]); } } } ?>
-----------------------------------------------------
답변 3개
먼저 확인해보실부분이
http://openapi.work.go.kr/opi/opi/opia/wantedApi.do?authKey=************&callTp=D&returnType=XML &wantedAuthNo=K120032212140053&infoSvc=VALIDATION
이렇게 해당 xml포맷으로 내용이 출력되는 우선 확인해보신후 진행하시는게 좋을꺼 같습니다.
해당 paramater나 인증키 정보가 정확하게 되었는지 먼저 확인해보시는 것이 우선일듯생각됩니다.
그리고 나서 여기서 xml포맷으로 데이터가 나오면 curl 을 사용하여 하나씩 진행해보시면 정상적으로 될것입니다.
저도 잘 안될경우 하나씩 처음부터 확인해가면서 근본적인 원인을 찾으면서 진행합니다.
도움이 되시리라 생각됩니다. ^^
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 2개
댓글을 작성하려면 로그인이 필요합니다.
자세히는 보지 못했습니다만 디코딩이 빠진 것 같습니다.
$response = cURL_exec($ch); cURL_close($ch);
return $response; ///// 빠진 부분
답변에 대한 댓글 3개
cURL_close($ch);
return $response; ///// 빠진 부분
echo var_dump($response); /// 이렇게 하면 우선 array 를 출력해 보세요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인