다른 사이트에서 보내주는 xml 파일을 게시판에 적용하려면... 어떻게 해야 하는지 궁금합니다.

Q & A

질답게시판

홈 > 회원포럼 > 질답/버그/제안
질답/버그/제안

다른 사이트에서 보내주는 xml 파일을 게시판에 적용하려면... 어떻게 해야 하는지 궁금합니다.

13 사랑곰탱이 4 95

안녕하세요...아미나 고수님들....


항상 초보수준에서 벗어나지 못하고 헤매이고 있는 1人 입니다.


궁금한 사항은 다름이 아니오라, 하이존뉴스와 제휴를 하려고 하는 인터넷뉴스 사이트에서 xml 파일을 보내 준다고 하면서 게시판에 데이터를 등록을 해야 한다고 하더라구요...


그래서, xml 파일을 게시판에 적용을 하려면 어떻게 해야 하는지 궁금해 졌습니다.


샘플파일을 하나 받았는데요..아래 내용입니다..

<?xml version="1.0" encoding="UTF-8"?>

-<news>

<news_key>suncode1-20190717154353</news_key>

<datetime>20190717155017</datetime>

-<writer_list>

-<writer>

<name>기자 이름</name>

<email>email@naver.com</email>

</writer>

</writer_list>

-<category_list>

<code>s0700z0101</code>   //코드값입니다.

<m>KPGA</m>

</category_list>

<title>3년 연속 ‘장타왕’ 노리는 김봉섭, “장타는 자존심, 장타왕은 자부심”</title>

<sub_title/>

-<text>

-<![CDATA[[20190717154843-140960][제호]“장타는 포기할 수 없는 자존심, 장타왕은 선수로서의 자부심”

 

‘제62회 KPGA 선수권대회 with A-ONE CC’를 기점으로 반환점을 돈 2019 시즌 KPGA 코리안투어의 ‘BTR 평균 드라이브 거리’ 부문 1위는 김봉섭(36.조텍코리아)이다.


10개 대회를 치르며 평균 308.089야드를 기록한 김봉섭은 2012년, 2017년, 2018년 세 차례나 장타왕에 올랐고 2012년 작성한 평균 309.087야드는 KPGA 코리안투어의 역대 최장 평균 드라이브 거리이기도 하다.


김봉섭은 “장타에 대한 자신감은 항상 높다. 그렇기에 장타왕에 대한 욕심도 많다”라며 “사실 올해는 김대현, 김태훈, 허인회, 김건하, 마르틴 김 등 역대 장타왕들이 모두 모인 만큼 그 어느때 보다 장타왕 경쟁에서 앞서 나가고 싶었다. 아직 시즌이 끝나지는 않았지만 지금 순위를 보면 기분은 좋다. 뿌듯하다”라고 전했다.


뉴스출처 :[KPGA]

]]>

</text>

-<img_list>

<url>20190717154843-140960</url>

<desc/>

</img_list>

-<img_list2>

<url2/>

<desc2/>

</img_list2>

-<img_list3>

<url3/>

<desc3/>

</img_list3>

-<img_list4>

<url4/>

<desc4/>

</img_list4>

<youtube_link/>

-<ext>

<outlink> </outlink>

<copyright> </copyright>

<test> </test>

</ext>

</news>


이렇게 뉴스 자료가 넘어오면, 한개의 게시판에 그대로 데이터가 넘어오게 할 수 없는지요...

할수 있다면 어떻게 해야 하는지 궁금해서 고수님들께 여쭈어 봅니다...


읽어주시느라 감사합니다.

행복한 하루였으면 합니다.

4 Comments
사랑곰탱이 님 안녕하세요?

올려주신 질문의 요지가 다른 사이트에서 받아온 XML을 파싱하고

보기좋게 문자열 처리를 하여 아미나에 게시글로 작성한다는 말씀이신지요?

비록 제가 고수는 아니지만 올려주신 XML을 바탕으로 PHP 스크립트를 작성해볼게요 ^^


<?php
header('Content-Type: text/html; charset=UTF-8');

define('_INDEX_', true);
include_once('./_common.php');

function board_write($bo_table, $subject, $content, $mb_id) 
{
    global $g5;
 
    $mb = get_member($mb_id); 
    $write_table = "g5_write_{$bo_table}";
    $wr_num = get_next_num($write_table);
    $wr_reply = '';
    $ca_name = "";
    $html = ""; $secret=""; $mail = "";
    $wr_subject = addslashes(trim($subject));
    $wr_content = addslashes(trim($content));
    $wr_link1 = "";
    $wr_link2 = "";
    $wr_email = "";
    $wr_name = addslashes($bo[bo_use_name] ? $mb[mb_name] : $mb[mb_nick]);
 
    $sql = " insert into $write_table
                     set wr_num = '$wr_num',
                     wr_reply = '$wr_reply',
                     wr_comment = 0,
                     ca_name = '$ca_name',
                     wr_option = '$html,$secret,$mail',
                     wr_subject = '$wr_subject',
                     wr_content = '$wr_content',
                     wr_link1 = '$wr_link1',
                     wr_link2 = '$wr_link2',
                     wr_link1_hit = 0,
                     wr_link2_hit = 0,
                     wr_hit = 0,
                     wr_good = 0,
                     wr_nogood = 0,
                     mb_id = '$mb_id',
                     wr_password = '',
                     wr_name = '$wr_name',
                     wr_email = '$wr_email',
                     wr_homepage = '',
                     wr_datetime = '".G5_TIME_YMDHIS."',
                     wr_last = '".G5_TIME_YMDHIS."',
                     wr_ip = '{$_SERVER['REMOTE_ADDR']}',
                     wr_1 = '',
                     wr_2 = '',
                     wr_3 = '',
                     wr_4 = '',
                     wr_5 = '',
                     wr_6 = '',
                     wr_7 = '',
                     wr_8 = '',
                     wr_9 = '',
                     wr_10 = '' ";
    sql_query($sql);
    $wr_id = sql_insert_id();
    sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");
    sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', '$mb_id' ) ");
    sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
    return true;
}

 
$xml_news = <<<thisXML
<?xml version="1.0" encoding="UTF-8"?>
-<news>
<news_key>suncode1-20190717154353</news_key>
<datetime>20190717155017</datetime>
-<writer_list>
-<writer>
<name>기자 이름</name>
<email>email@naver.com</email>
</writer>
</writer_list>
-<category_list>
<code>s0700z0101</code>   //코드값입니다.
<m>KPGA</m>
</category_list>
<title>3년 연속 ‘장타왕’ 노리는 김봉섭, “장타는 자존심, 장타왕은 자부심”</title>
<sub_title/>
-<text>
-<![CDATA[[20190717154843-140960][제호]“장타는 포기할 수 없는 자존심, 장타왕은 선수로서의 자부심”

‘제62회 KPGA 선수권대회 with A-ONE CC’를 기점으로 반환점을 돈 2019 시즌 KPGA 코리안투어의 ‘BTR 평균 드라이브 거리’ 부문 1위는 김봉섭(36.조텍코리아)이다.

10개 대회를 치르며 평균 308.089야드를 기록한 김봉섭은 2012년, 2017년, 2018년 세 차례나 장타왕에 올랐고 2012년 작성한 평균 309.087야드는 KPGA 코리안투어의 역대 최장 평균 드라이브 거리이기도 하다.

김봉섭은 “장타에 대한 자신감은 항상 높다. 그렇기에 장타왕에 대한 욕심도 많다”라며 “사실 올해는 김대현, 김태훈, 허인회, 김건하, 마르틴 김 등 역대 장타왕들이 모두 모인 만큼 그 어느때 보다 장타왕 경쟁에서 앞서 나가고 싶었다. 아직 시즌이 끝나지는 않았지만 지금 순위를 보면 기분은 좋다. 뿌듯하다”라고 전했다.

뉴스출처 :[KPGA]
]]>
</text>
-<img_list>
<url>20190717154843-140960</url>
<desc/>
</img_list>
-<img_list2>
<url2/>
<desc2/>
</img_list2>
-<img_list3>
<url3/>
<desc3/>
</img_list3>
-<img_list4>
<url4/>
<desc4/>
</img_list4>
<youtube_link/>
-<ext>
<outlink> </outlink>
<copyright> </copyright>
<test> </test>
</ext>
</news>
thisXML;

$xml_news = str_replace('-<', '<', $xml_news); // 문자열 처리를 합니다. 안 해주면 에러가 발생하네요.
$xml = simplexml_load_string($xml_news); // XML로 읽어옵니다.
$category = $xml->category_list->m; // 카테고리
$subject = $xml->title; // 제목
$content = $xml->text; // 본문
$content = preg_replace('/.+[제호]/u', '', $content); // 본문 앞부분의 문자열 처리를 합니다.

$bo_table = ''; // 작성할 게시판의 테이블
$mb_id= ''; // 작성자 id
$result =  board_write($bo_table, $subject, $content, $mb_id);

?>


게시글이 작성된 결과물을 이미지로 올립니다.



이 내용과 관련하여 제가 얼마 전에 올렸던 자료에서 유사한 내용이 있으니 참고하시면 좋을 것 같네요 ^^

사이트 테스트를 위한 자동 게시글 작성 플러그인: http://amina.co.kr/bbs/board.php?bo_table=skin_member&wr_id=12317


참고로 문자열 변수가 아니라 URL에서 XML을 불러오려면 simplexml_load_file() 함수를 사용하시면 됩니다.

공식문서: https://www.php.net/manual/en/function.simplexml-load-file.php

지속적으로 XML을 불러와서 게시글을 작성하시려면 cron 등을 활용하셔야 될 것 같고,

이미 작성된 게시글과 새로 불러온 XML의 제목을 비교하여 동일하면 불러오지 않는 부분을 추가하셔야 될 것 같습니다.
(이 부분은 wr_subject에 unique index를 거는 방식으로도 해결할 수 있습니다. SIR을 참고하시면 좋겠네요.)

그럼 저녁식사 맛있게 드세요 ^^
이니스프리님...답변 주셔서 감사합니다.

저는 이니스프리님 처럼 고수는 아닙니다..ㅎㅎ..
뉴스를 제공하는 업체에서요...

초보인 제가 운영하고 있는 hizonenews.com에 ftp 주소에다가 xml 문서를 업로드 하면 곧바로
[카테고리] 코드값에 따라 해당 게시물이 지정된 게시판에 업로드 되고, 그림파일이나 사진도 업로드 된다고 한더라구요.
또한, [기자 이름]에 제 이름을 저장해 놓으면, xml 파일이 ftp 일정 폴더에 업로드 되면 해당 케테고리 값에 따라 자동을 기사가 작성이 되고, 하단에 기자 이름이 올라온다고 하더라구요...

뉴스 사이트를 운영하는 사람은 그냥 지역 이슈만 직접 작성하면 된다고 하는데요...
코드값에 따라 해당 게시판에 자동으로 업로드 되게 만들고 싶어서요...

이니스프리 님은 쪽지도 안 날아가고 해서 조금은 답답하기도 하고, 이니스프리님이 부럽습니다...ㅎㅎ...

저보다 고수님이시니, 어떻게 해야 하는지 가르쳐 주셨으면 고맙겠습니다.
감사합니다...

오늘도 금불이네요... 즐거운 하루가 되시길 바랍니다...
M 한별아빠 07.20 01:06  
1. 음... 봐서는 이해를 잘못 하신 것 같은데...ㅠㅠ

2. 운영하는 사이트에 xml 로 작성해서 사이트에 기사를 올려 두면, 운영하는 사이트에 내용이 올라가는 것이 아니라 해당 뉴스 사이트에서 자동으로 작성한 기사를 퍼간다는 것으로 보이거든요.

쉽게 구글이나 네이버 검색엔진 노출시 사이트맵 제출하듯이... 기사로 작성하신 xml 파일을 사이트에 올려주면 그 내용을 가져가서(파싱해서) 언론사에 노출한다는 것이죠. 그래서 따로 언론사 사이트에 와서 기사등록하던지 관리할 필요없다는 것이고...

3. 해당 언론사 기사를 내사이트에 자동으로 넣어주는 것이 아니라... 내 기사를 해상 언론사에서 퍼가기 쉽도록 작업해주는...ㅠㅠ
앗 그렇군요! 역시 제가 초보라서 반대 방향의 작업으로 잘못 이해를 했네요 ㅠㅠ
그럼 한별아빠 님께서도 태풍 조심하시고 즐거운 주말 되세요!
항상 감사드립니다 ^-^
제목
최근 글
최근 댓글
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand