t

네이버에서 제공하는 환율정보를 가져오는 함수

만들면서 정규식을 배워야겠다는 마음이 간절히 드네요 ㅋㅋ

 

[code]

# 네이버 자료에서 환율정보를 얻어온다.

function Ncurrency() {

 

# 데이터 호출

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://info.finance.naver.com/marketindex/exchangeList.nhn');

curl_setopt($ch, CURLOPT_POST, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

curl_close($ch);

$res = iconv('euc-kr', 'UTF-8', $response); if(!$response) return 'false';

 

# 파싱

preg_match("/<tbody.*?>.*?<\/[\s]*tbody>/s", $res, $tbody); if(!is_array($tbody)) return 'false';

preg_match_all('`<tr.*?>(.*?)<\/[\s]*tr>`s', $tbody[0], $tr); if(!is_array($tr)) return 'false';

 

$Data = array();

foreach($tr[0] as $k=>$v) {

 

unset($td, $akey);

preg_match_all('`<td.*?>(.*?)<\/td>`s', $v, $td);

$td = $td[0];

$akey = preg_replace('/([\xEA-\xED][\x80-\xBF]{2})+/', '', strip_tags($td[0]));

$akey = trim(str_replace('JPY (100)', 'JPY', $akey));

$akey = trim(str_replace(' 100', '', $akey)); if(!$akey) return 'false';

$Data[$akey]['통화명'] = trim(strip_tags($td[0]));

$Data[$akey]["매매기준율"] = str_replace(',', '', trim(strip_tags($td[1])));

$Data[$akey]["현찰살때"] = str_replace(',', '', trim(strip_tags($td[2])));

$Data[$akey]["현찰팔때"] = str_replace(',', '', trim(strip_tags($td[3])));

$Data[$akey]["송금보낼때"] = str_replace(',', '', trim(strip_tags($td[4])));

$Data[$akey]["송금받을때"] = str_replace(',', '', trim(strip_tags($td[5])));

$Data[$akey]["환가료율"] = str_replace(',', '', trim(strip_tags($td[6])));

$Data[$akey]["미화환산율"] = str_replace(',', '', trim(strip_tags($td[7])));

}

 

return $Data;

}

$Data = Ncurrency();

[/code]

|

댓글 21개

순서에 변화가 없다면
간단하게 tr별로 돌려버리믄 ㅋㅋ
정규식 써보자는 마음과 소스를 줄이는데 중점을 두었습니다 ㅋㅋ
이런건 추천 !
감사합니다 ㅎㅎㅎ
이것은 상업용으로는 사용이 불가능하겠죠.

네이버도 외환은행에서 돈주고 사용하는것 같던데...
아무래도 그러겠죠 ㅎㅎㅎ
이렇게 줄이는 건 어떤가요?

# 파싱
preg_match_all('`<tr.*?>(.*?)<\/[\s]*tr>`s', $res, $tr);

$Data = array();
foreach($tr[0] as $k=>$v) {

unset($td, $akey);
preg_match_all('`<td.*?>(.*?)<\/td>`s', $v, $td);
$td = $td[0];
$akey = preg_replace('/([\xEA-\xED][\x80-\xBF]{2})+/', '', strip_tags($td[0]));
$akey = preg_replace('/ \(?100\)?/', '', trim($akey)); if(!$akey) continue;
내부에서 td별로 나눌 필요가있어서요 ㅎㅎㅎ
아 키부분이구나...


원래는 일본만 그런줄알고 간단하게 짜놓은건데 나중에 다른 국가도 몇개 그런것을 확인해서 부랴부랴 수정하다보니 ㅎㅎ
저 또한 파싱 부분은 별도로 빼는게 나을거 같습니다. 해당 함수는 데이터 가져와서 재 배열 정도만 처리하는게 깔끔할 거 같네요
저함수로 파싱된 데이터는 하루에 한번 db에 들어갑니다 ㅎㅎㅎ

아래무래 파싱은 자주하면 안좋다는 생각에 말씀하신 의견에 한표 드립니다!
네이버..아직 까지는
검색엔진에 최강자 이죠..
개구리가 올챙이적 모른다고 전에 생각했었습니다..
중이 고기 맛을 알면.. 더 적으면..길어질거 깉아서 이만..^^

지금도 그 생각에는 변함이 없지요..(유저로서..)..지움..

보세요..

얼마나 비참하게 무너지고 한 순간에 꿈에 대한 추억을 ....................................

잡는 심정으로 달려 가고 s 그룹에게 살려 달라 하겟지만..
오버인지 모르겠지만 아직도 네이버에 줄 서는건 아닌거 같습니다..

네이버 창업자가 누구라고 알고 계시는지요..^^?
최근에 그(네이버) 직원들과 통화 해 보셨나요..^^
알면서 쓸수밖에 없는 현실이 서글프죠 ㅠ.ㅠ

네이버랑은 페이 쪽때문에 하루에 두세번씩 통화하는데 자신이 맡지 않은건 무조건 전화를 돌리더라구요 ㅎㅎ(cs불만... ㅜ..ㅜ)
http://www.enjoytaiwan.co.kr/

요기 한쪽에 대만환율좀 표시하고 싶었는데, 이거 활용하면 되나요?
네네 ㅎㅎ
어떻게 출력을 해야 하죠? ;;;
$Data 안에 배열 값을 출력을 해야 하는데 ㅜㅜ
echo $Data['TWD']['매매기준율'];
처럼 사용 하시면됩니다.

가능한 하루에 한번 저함수로 db에 저장하고 db에서 꺼내오는 식으로 사용하세요 ㅎㅎ
감사합니다.출력이 되네요.
파싱의 꽃은 정규표현식이죠 ㅋ
저는 시간 날때 마다 http://regexr.com/ 여기서 연습합니다

저도 거기서 노는데 ㅋㅋㅋ
좋은 소스 감사합니다. 혹시 환율 기준일 표기는 어떻게 하셨나요?
댓글을 작성하시려면 로그인이 필요합니다.

자유게시판

+
제목 글쓴이 날짜 조회
9년 전 조회 2,049
9년 전 조회 1,801
9년 전 조회 2,349
9년 전 조회 2,374
9년 전 조회 2,475
9년 전 조회 2,195
9년 전 조회 3,125
9년 전 조회 2,198
9년 전 조회 2,043
9년 전 조회 1,806
9년 전 조회 2,664
9년 전 조회 2,307
9년 전 조회 2,674
9년 전 조회 2,065
9년 전 조회 4,682
9년 전 조회 2,282
9년 전 조회 2,103
9년 전 조회 2,477
9년 전 조회 2,075
9년 전 조회 1,730
9년 전 조회 1,654
9년 전 조회 2,095
9년 전 조회 1,393
9년 전 조회 1,836
9년 전 조회 1,468
9년 전 조회 1,596
9년 전 조회 1,561
9년 전 조회 1,711
9년 전 조회 1,854
9년 전 조회 1,779