2016-12-16 3 views
0

저는 수년 동안 PHP를 사용해 본 적이 없으며 트위터의 이름이 필요한 방식으로 트윗 피드의 RSS 피드를 조작하려고합니다. 나는 현재 TwitRSS에서 RSS 피드를 가져오고 있으며 tweeter의 이름이 네임 스페이스를 사용한다는 것을 제외하고는 모두 정상적으로 작동합니다. 따라서 요소는 트위터 이름을 말합니다. 나는이 사이트에서 네임 스페이스를 사용하는 방법에 대해 많은 스레드를 보았으며 성공하지 못했지만 모두 시도했습니다. 물론이 에코의 아웃되는 모든 일반 요소에 대해 잘 작동네임 스페이스를 SimpleXML로 바꾸려면 어떻게해야합니까?

$newsoutput = new SimpleXMLElement('http://twitrss.me/twitter_search_to_rss/?term=php', LIBXML_NOCDATA, true); 
$newsoutput = json_decode(json_encode($newsoutput), TRUE); 
foreach ($newsoutput['channel']['item'] as $item) { 
echo $item['title']."<br>".$item['description']."<br>".$item['link']."<br>".$item['guid']."<br>".$item['pubDate']."<br>"; 
echo $item['author']."br";} 

,하지만 내가 네임 스페이스 태그를 얻으려고 할 때마다 내가 해봤 모든 솔루션은 결과는 :

는 지금 내 코드는 다음과 같습니다 루프의 오류 메시지 일반적으로 자식 요소가 null 인 것과 관련이 있습니다.

이제 다른 해결책을 시도하고 싶습니다. 나는 네임 스페이스 요소가 아닌 모든 네임 스페이스 요소를 바꿀 문자열 교체를하고 싶습니다. 이상적인 결과 RSS 피드는 모든 요소를 ​​대체 한 다음 정상적으로 제거합니다.

내가 추가 해봤 물건처럼 : 나는 항목 요소의 배열을 반복하고 echo'ing 전에 SimpleXML을 배열을 변경해야 할 것이라고 생각하기 때문

$newsoutput->str_replace("dc:creator","author",""); 

내가 루프 전에 추가 . 내가 뭘하고 있는지 하나의 문제는 php str_replace가 3 개의 매개 변수를 필요로한다는 것이며 두 개만 생각할 수 있다는 것입니다. 내가 바꾸고 싶은 단어와 그것을 대체하고 싶은 단어. 그 밖의 무엇이 필요하겠습니까? 또한 새로운 네임 스페이스 프리 피드에 대한 루프를 실행하기 전에 replace 문자열에 대한 루프를 실행해야한다고 생각합니다.

+0

는 죄송합니다 "트위터 이름은"네임 스페이스와 태그에 둘러싸여되어야하지만 그것은 – XCon065

+0

'str_replace' 글로벌 기능을 밖으로 제거되었다. '-> str_replace'가 클래스 메소드를 사용하고 있습니다. 당신은 그것을 잘못 이해하고 있습니다. –

+0

oops, 작성자가 이전 문자열에서 시도로 대체되었습니다. – XCon065

답변

0

코드는 어렵게 생활을하고 있습니다 다른 예에서 복사 해킹을 많이 가지고하지 쉽게 : 당신이 LIBXML_NO_CDATA 필요하지 않습니다

  • ; 어쨌든 객체를 XML로 되돌릴 때만 차이가 있습니다 (결과도 print_r이지만, SimpleXMLElement와 같은 "마술"객체에 대해서는 그다지 의존해서는 안됩니다).
  • $newsoutput = json_decode(json_encode($newsoutput), TRUE); 기본적으로 "SimpleXML API의 모든 유용한 비트를 버리고 형식을 보장 할 수없는 배열을 제공하려고합니다"라고 말합니다. 해킹에 해킹을 추가하는 것 외에 문자열 조작을 추가하는 것입니다.

대신 (동일한 방식으로 작동 어쩌면 또한 the ->attributes() method) the ->children() method을 사용하는 것입니다 SimpleXML을 가진 네임 스페이스를 사용하는 방법을 배워야한다.

그래서 당신은이 같은 것을 사용할 수 있습니다

$newsoutput = new SimpleXMLElement('http://twitrss.me/twitter_search_to_rss/?term=php', 0, true); 
foreach ($newsoutput->channel->item as $item) { 
    echo $item['title']."<br>".$item['description']."<br>".$item['link']."<br>".$item['guid']."<br>".$item['pubDate']."<br>"; 
    echo $item->children('http://purl.org/dc/elements/1.1/')->creator."<br>"; 
} 
+0

예, 작동합니다. 사실 이것을 게시 한 직후에 나는 그것을 알아 낸 것입니다. – XCon065

+0

이제 RSS 피드로 완전히 반향하는 문제가 생겼습니다. 내가 모든 소스가보기 소스를 클릭하더라도 브라우저의 피드 마지막 줄만 생성하는 솔루션입니다. 소스도 한 줄의 코드로만 표시됩니다. – XCon065

+0

브라우저에서 피드의 마지막 항목을 말 했어야합니다. – XCon065

관련 문제