Snoopy.class 관련 질문 채택완료
http://sir.co.kr/g5_tip/2658">http://sir.co.kr/g5_tip/2658
위에 팁 보면서 하고 있는데
$newpost = array(
'mb_id' => 'phoneclub',
'bo_table' => $bo_table,
'wr_subject' => $item->title,
'wr_content' => $item->description."... ... [더보기]",
'wr_link1' => $item->link
);
insert_write($newpost);
$item->title 타이틀은 잘 가지고 오는데
<ht:news_item_title> 이런류의 앞에 ht가 붙은 건 못가져 오더라구요..
$item->ht:news_item_title; 이렇게 해봐도 안되고 팁좀 주실수 있나요?
답변 1개
<ht:news_item_title> 이런 류의 내용은 2차원 배열의 데이타로 저장되기 때문에
2차원 키를 이용하여 값을 가져와야 합니다.
예를 들어 설명하자면,
먼저 파싱할 xml 데이타가 다음과 같다고 가정하고
</span></p><p><span style="line-height: 1.5;">$xml_content = '<?xml version="1.0" encoding="UTF-8"?></span></p><p><span style="line-height: 1.5;"><rss></span></p><p> <channel></p><p> <item></p><p> <title>그녀는 예뻤다</title></p><p> <description>그녀는 예뻤다 1회</description></p><p> <link><a href="<a href="https://www.google.com/trends/hottrends?pn=p23#a=20150917-%EA%B7%B8%EB%85%80%EB%8A%94+%EC%98%88%EB%BB%A4%EB%8B%A4" target="_blank" rel="noopener noreferrer">https://www.google.com/trends/hottrends?pn=p23#a=20150917-%EA%B7%B8%EB%85%80%EB%8A%94+%EC%98%88%EB%BB%A4%EB%8B%A4</a></link>"><a href="https://www.google.com/trends/hottrends?pn=p23#a=20150917-%EA%B7%B8%EB%85%80%EB%8A%94+%EC%98%88%EB%BB%A4%EB%8B%A4</link>" target="_blank" rel="noopener noreferrer">https://www.google.com/trends/hottrends?pn=p23#a=20150917-%EA%B7%B8%EB%85%80%EB%8A%94+%EC%98%88%EB%BB%A4%EB%8B%A4</link></a></a></p><p> <pubDate>Thu, 17 Sep 2015 01:00:00 +0900</pubDate></p><p> <ht:picture>//t0.gstatic.com/images?q=tbn:ANd9GcRaIsjysULSRFGj6FSMYiCzXd77LOuMKm9_T18a93Rn5sGt4mzcrJlLS9vT06JmHZybH7KOy0RQ</ht:picture></p><p> <ht:picture_source>오마이뉴스</ht:picture_source></p><p> <ht:approx_traffic>5,000+</ht:approx_traffic></p><p> <ht:news_item></p><p> <ht:news_item_title><<b>그녀는 예뻤다</b>></ht:news_item_title></p><p> <ht:news_item_snippet><<b>그녀는 예뻤다</b>>는 제목처럼 과거형으로 '예뻤던'</ht:news_item_snippet></p><p> <ht:news_item_url><a href="<a href="http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0002144814" target="_blank" rel="noopener noreferrer">http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0002144814</a></ht:news_item_url>"><a href="http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0002144814</ht:news_item_url>" target="_blank" rel="noopener noreferrer">http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0002144814</ht:news_item_url></a></a></p><p> <ht:news_item_source>오마이뉴스</ht:news_item_source></p><p> </ht:news_item></p><p> </item></p><p> </channel></p><p></rss>';</p><p><span style="line-height: 1.5;">
위의 소스에서
2단계 엘리먼트는 2차원 배열이 되게 됩니다.
여기서 2단계 엘리먼트는
따라서, <ht:news_item_title>를 출력하려면 위의 팁 링크에 게시된 post_rss.php 파일의
foreach 루푸 안에서 다음과 같이 하면 됩니다.
</span></span></p><p><span style="line-height: 1.5;">$xml = @simplexml_load_string($snoopy->results);</span></p><p><span style="line-height: 1.5;"><span style="line-height: 1.5;">
</span></span></p><p><span style="line-height: 1.5;"><span style="line-height: 1.5;">foreach($xml->channel->item as $item) {</span></span></p><p><span style="line-height: 1.5;"> //1차원 배열 <ht:*> 부분 가져오기 추가</span></p><p> $picture = '<img src="'.$item->picture.'" alt="'.$item->picture_source.'">';</p><p> </p><p> //2차원 배열 <ht:news_item> 영역 내용 가져오기 추가</p><p> <span style="line-height: 1.5;"><span style="line-height: 1.5;">foreach($item->news_item as $news){</span></span></p><p><span style="line-height: 1.5;"> $news_item = $news->news_item_title.'
... (<a href="'.$news->news_item_url.'" target="_blank">더보기</a>)';</span></p><p><span style="line-height: 1.5;"> }</span></p><p><span style="line-height: 1.5;"><span style="line-height: 1.5;">
</span></span></p><p><span style="line-height: 1.5;"> //위의 추가로 불러온 내용을 아래의 wr_content 값에 추가함</span></p><p><span style="line-height: 1.5;"> $sql = "select count(*) as cnt from $write_table where wr_link1 = '".$item->link."' and wr_is_comment = 0";</span></p><p><span style="line-height: 1.5;"> $row = sql_fetch($sql);</span></p><p><span style="line-height: 1.5;"> </span></p><p><span style="line-height: 1.5;"> if ($row['cnt'] == 0){</span></p><p><span style="line-height: 1.5;"> $newpost = array(</span></p><p><span style="line-height: 1.5;"> 'mb_id' => 'admin',</span></p><p><span style="line-height: 1.5;"> 'bo_table' => $bo_table,</span></p><p><span style="line-height: 1.5;"> 'wr_subject' => $item->title,</span></p><p><span style="line-height: 1.5;"> 'wr_content' => $item->description.'...
... [<a href="'.$item->link.'" target="_blank">더보기</a>]'.$news_item.'
'.$picture,</span></p><p><span style="line-height: 1.5;"> 'wr_link1' => $item->link</span></p><p><span style="line-height: 1.5;"> );</span></p><p><span style="line-height: 1.5;"> insert_write($newpost);</span></p><p><span style="line-height: 1.5;"> }</span></p><p><span style="line-height: 1.5;">}</span></p><p><span style="line-height: 1.5;"><span style="line-height: 1.5;">
답변에 대한 댓글 3개
xml 문서의 네임스페이스에 ht 접두어가 문제를 일으키는 것 같네요.
위에 알려드린 두번째 소스(post_rss.php 파일)에서 foreach 루푸 위에 있는
$xml = @simplexml_load_string($snoopy->results); 이 코드를 아래와 같이 수정해보세요.
[code]
$xml = @simplexml_load_string($snoopy->results); // 이부분을 아래와 같이 수정
$results = str_replace('xmlns:ht', 'xmlns', $snoopy->results); //ht 접두어 제거
$xml = @simplexml_load_string($results);
[/code]
제가 RSS 수집기(post_rss.php)를 통해 확실한 테스트는 해보지 못했지만,
위처럼 수정하시고 나머지는 알려드린 대로 그대로 하면 아마도 될 것으로 생각됩니다.
일주일동안 고민하던게 풀리니 정말 기분이 좋습니다
감사합니다!!!!
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
//1차원 배열 <ht:*> 부분 가져오기 추가
$picture = '<img src="'.$item->picture.'" alt="'.$item->picture_source.'">';
그런데 해당 부분에서
$item->picture 이부분을 가져오지 못하는거 같은데 찍어봐도 아무것도 나오지 않습니다
title이나 link이런 부분은 가져오는데 ht가 붙은 내용은 못가져오는거 같습니다 ㅜㅜ