Google 뉴스에서 기사를 검색하여 기사 제목과 URL을 트윗
16780 단어 PHPTwitterAPIgoogleapi
개발 환경
Google 뉴스 검색 및 검색
Google 뉴스 API를 방문하여 기사 정보를 얻습니다.
사용법에 대해서는, 이 사이트 1 를 참고로 했습니다.
· 주제 = "스포츠"의 기사 정보를 얻고 싶을 때
htp // // ws. 오, ぇ. 이 m/네 ws? hl = 그럼 & 네 d = u s & no = U TF-8 & Oh = U TF-8 & U t t t = 나머지 m & Topi c = s
· "나가 토모"라는 키워드로 좁힌 기사 정보를 얻고 싶을 때
http://news.google.com/news?hl=ko&ned=us&ie=UTF-8&oe=UTF-8&output=atom&q=나가토모
각각 액세스. 그러면 결과가 ATOM 형식으로 반환된다.
이 결과로부터 기사 타이틀과 URL을 꺼내 PHP 배열에 격납한다.
코드는, 이 사이트 2 의 것을 거의 그대로 copipe 시켜 주고 있습니다.
뉴스의 키워드 검색에 대해 설명합니다. 토픽스 검색하고 싶을 때에는 URL을 적절히 읽어낸다.
※현재 이 코드로 한 번에 꺼낼 수 있는 기사는 10건이 상한인 것 같습니다.
tweet_gnews.php// ---------------------------------------------------------------
// グーグルニュース検索・データ取得関数 atom
//
//
/* ---------------- 以下、設定部分 ------------------------------ */
//$keyword:ニュース検索のキーワード
//$max_num:取得記事数の上限
function get_news($keywords, $max_num)
{
set_time_limit(90);
//---- キーワード検索したいときのベースURL
$API_BASE_URL = "https://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom&q=";
//---- キーワードの文字コード変更
$query = urlencode(mb_convert_encoding($keywords,"UTF-8", "auto"));
//---- APIへのリクエストURL生成
$api_url = $API_BASE_URL.$query;
//---- APIにアクセス、結果をsimplexmlに格納
$contents = file_get_contents($api_url);
$xml = simplexml_load_string($contents);
//print_r($xml);
//記事エントリを取り出す
$data = $xml->entry;
//記事のタイトルとURLを取り出して配列に格納
for ($i = 0; $i < count($data); $i++) {
$list[$i]['title'] = mb_convert_encoding($data[$i]->title ,"UTF-8", "auto");
$url_split = explode("=", (string)$data[$i]->link->attributes()->href);
$list[$i]['url'] = end($url_split);
}
//$max_num以上の記事数の場合は切り捨て
if(count($list)>$max_num){
for ($i = 0; $i < $max_num; $i++){
$list_gn[$i] = $list{$i};
$i++;
}
}else{
$list_gn = $list;
}
//配列を出力
return $list_gn;
}
※이하 보충
기사의 URL 추출에 관한 참고 사이트 2
$list[$i]['url'] = $data[$i]->link->attributes()->href;
그렇다면 결과가
[url] => SimpleXMLElement Object
(
[0] => http://news.google.com/news/url?sa=t&fd=R&ct2=us&usg=AFQjCNExjy_3EjxKvUdoB57vOHC_vBflUQ&clid=c3a7d30bb8a4878e06b80cf16b898331&ei=Dl1lW7CWHZno4wKH9aiQAg&url=http://news.livedoor.com/article/detail/15112210/
)
처럼 배열이 아니라 SimpleXMLElement Object의 형태로 돌아온다. 또 URL도 소스 원의 기사 URL을 Google 뉴스가 끌어온 것이 되기 어려워. 이를 해결하기 위해,
// ---------------------------------------------------------------
// グーグルニュース検索・データ取得関数 atom
//
//
/* ---------------- 以下、設定部分 ------------------------------ */
//$keyword:ニュース検索のキーワード
//$max_num:取得記事数の上限
function get_news($keywords, $max_num)
{
set_time_limit(90);
//---- キーワード検索したいときのベースURL
$API_BASE_URL = "https://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom&q=";
//---- キーワードの文字コード変更
$query = urlencode(mb_convert_encoding($keywords,"UTF-8", "auto"));
//---- APIへのリクエストURL生成
$api_url = $API_BASE_URL.$query;
//---- APIにアクセス、結果をsimplexmlに格納
$contents = file_get_contents($api_url);
$xml = simplexml_load_string($contents);
//print_r($xml);
//記事エントリを取り出す
$data = $xml->entry;
//記事のタイトルとURLを取り出して配列に格納
for ($i = 0; $i < count($data); $i++) {
$list[$i]['title'] = mb_convert_encoding($data[$i]->title ,"UTF-8", "auto");
$url_split = explode("=", (string)$data[$i]->link->attributes()->href);
$list[$i]['url'] = end($url_split);
}
//$max_num以上の記事数の場合は切り捨て
if(count($list)>$max_num){
for ($i = 0; $i < $max_num; $i++){
$list_gn[$i] = $list{$i};
$i++;
}
}else{
$list_gn = $list;
}
//配列を出力
return $list_gn;
}
$list[$i]['url'] = $data[$i]->link->attributes()->href;
[url] => SimpleXMLElement Object
(
[0] => http://news.google.com/news/url?sa=t&fd=R&ct2=us&usg=AFQjCNExjy_3EjxKvUdoB57vOHC_vBflUQ&clid=c3a7d30bb8a4878e06b80cf16b898331&ei=Dl1lW7CWHZno4wKH9aiQAg&url=http://news.livedoor.com/article/detail/15112210/
)
라고 하는 일을 하고 있다.
※보충 끝
기사 제목과 URL 트윗
얻은 뉴스 정보를 트윗합니다.
우선은 이 사이트 4 등을 참고로 트윗 준비
한다. 그리고는 트윗 투고 프로그램을 쓸 뿐.
코드는 이 사이트 5 를 참고로 했습니다.
트윗 문자수 제한이 있기 때문에, 기사 타이틀은 140자를 넘지 않게 트리밍을 실시한다. URL은 문자수 카운트의 대상외이기 때문에, 타이틀의 뒤에 그대로 실어도 OK.
tweet_gnews.php
//Oathライブラリの読み込み
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
function tweet(array $news_list)
{
//認証情報
$$consumerKey = "your consumer key";
$consumerSecret = "your consumer secret";
$accessToken = "your access token";
$accessTokenSecret = "your access token secret";
//接続
$twitter = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
//ニュースツイート
for($i = 0; $i < count($news_list); $i++){
$result = $twitter->post(
"statuses/update",
//タイトルのトリミング、URL記載
array("status" => mb_substr($news_list[$i]['title'],0,138)." ".$news_list[$i]['url'])
);
if($twitter->getLastHttpCode() == 200) {
// ツイート成功
print "tweeted\n";
} else {
// ツイート失敗
print "tweet failed\n";
}
}
}
위의 두 가지 함수를 작성하십시오.
tweet_gnews
$news_list = get_news("長友",10);
tweet($news_list);
실행하면 아래 그림과 같이 검색된 기사가 자동으로 트윗됩니다.
Google 뉴스를 JSON으로 얻기 ht tp // // 토메하치. 사쿠라. 네. jp/bぉg/아 rゔぇs/486 ¦ ↩
【업데이트】 구글 뉴스 취득 PHP의 예 htps : // 아 f. 미치몬. 네 t/우바바피/오오 ぇ_네 ws. HTML ↩
SimpleXMLElement Object 참조 htp //유 t. 하테나 bぉg. 코m/엔트리/20101215/1292427841 ↩
PHP에서 Twitter 트윗 (2015 년 2 월 버전) htps : // 이 m / 항상 t111 / ms / 9309801 cd3 3bcf6 32 ↩
PHP에서 Twitter에 게시 htps : // 코 m / 쿵 / ms / 굳이 3 f60 아카 b4b1227d61 ↩
Reference
이 문제에 관하여(Google 뉴스에서 기사를 검색하여 기사 제목과 URL을 트윗), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/muroya2355/items/62f3bf5e147884d00207텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)