가격 비교 사이트 연동 에러
본문
클릭하면 한글이 깨져서 나옵니다.
처음부터 그랬는데...네이버에 상품이 잘 올라가서 신경쓰지 않았습니다.
그런데..상품 노출수가 4500개정도 였는데..갑자기 850개로 줄었습니다.
전체상품 URL : http://www.mizcook.co.kr/shop/price/naver.php
클릭해서 확인해보면 한글이 깨지기는 했지만 영어 상품코드를 입력해보면 850개만 검색이 되는거 같습니다.
잘되다가 갑자기 이러는지..답답해 미치겠습니다.
아래 내용은 네이버 답변입니다
[Web발신]
1. 방화벽에서 네이버 쇼핑 장비를 막고 있지 않은지 - 175.158.18.* 대역
2. 방화벽에서 막고 있는게 없다면, 직접 확인하실때 정상적으로 파일이 다운로드 되는지 (파일 다운로드시 상품 수 온전한지) - http://www.mizcook.co.kr/shop/price/naver.php
3. EP생성 방식이 실시간으로 생성하는 방식으로 변경 되어 계속 EP생성 중이라 response가 되지 않는 건지 ㄴ 실시간 생성 방식이면 미리 EP를 생성해 놓는 방식으로 변경을 하시고 EP경로를 생성된 txt파일로 변경해 보시기 바랍니다.
감사합니다.
답변 3
문자가 깨어지는 것은 iconv 로 잡아주면 되는 것이구요.
네이버쪽 답변에서
1. 방화벽에서 막고 있다면 850개도 노출이 될리가 없을것이구요.
2. 실제로 해당 URL은 내용확인이 되니 해당사항은 없을거 같구요. (출력갯수 확인은 해보셔야 할거 같구요.)
3번에서 지적한 사항이 문제가 있네요. 지금 실 접속시 귀 사이트의 트래픽문제인지.. 하드웨어적인 문제인지.. 무척 느립니다. DB쿼리에서 실시간 생성하는 부분에 상품갯수가 많다거나 접속자수등으로 부하문제가 있다면 권고한 사항처럼 제품등록이 되면 텍스트 파일에 네이버에 돌려줄 가격비교 정보를 별도 저장해두고.. 네이버에 돌려주는 naver.php에서는 이 텍스트파일을 읽어와서 뿌려주는 형태로 해야 할 듯 싶네요.
아마도 버퍼에 쌓인 데이터의 용량이 메모리를 초과하여 iconv 함수에서 제대로 charset 을 변환하지 못한것 같습니다.
shop/price/naver.php 파일을 아래와 같이 수정 하였습니다.
<?php
include_once('./_common.php');
ob_start();
/*
네이버지식쇼핑상품EP (Engine Page) 제작및연동가이드 (제휴사제공용)
http://imgshopping.naver.net/admin/join/download/db_url/db_url_guide_20101205.pdf
Field Status Notes
<<<begin>>> 필수 상품의 시작을 알리는 필드
<<<mapid>>> 필수 판매하는 상품의 유니크한 상품ID
<<<pname>>> 필수 실제 서비스에 반영될 상품명(Title)
<<<price>>> 필수 해당 상품의 판매가격
<<<pgurl>>> 필수 해당 상품을 구매할 수 있는 상품URL
<<<igurl>>> 필수 해당 상품의 이미지URL
<<<cate1>>> 필수 판매하는 상품의 카테고리명(대분류)
<<<cate2>>> 선택 판매하는 상품의 카테고리명(중분류)
<<<cate3>>> 선택 판매하는 상품의 카테고리명(소분류)
<<<cate4>>> 선택 판매하는 상품의 카테고리명(세분류)
<<<caid1>>> 필수 판매하는 상품의 카테고리명(대분류)
<<<caid2>>> 선택 판매하는 상품의 카테고리명(중분류)
<<<caid3>>> 선택 판매하는 상품의 카테고리명(소분류)
<<<caid4>>> 선택 판매하는 상품의 카테고리명(세분류)
<<<model>>> 선택 모델명
<<<brand>>> 선택 브랜드
<<<maker>>> 선택 제조사
<<<origi>>> 선택 원산지
<<<deliv>>> 필수 배송료
<<<event>>> 선택 이벤트
<<<coupo>>> 선택 쿠폰
<<<pcard>>> 선택 무이자
<<<point>>> 선택 포인트
<<<mvurl>>> 선택 동영상 상품 여부
<<<selid>>> 선택 셀러 ID (오픈마켓에 한함)
<<<barcode>>> 선택 바코드 (전체EP만 사용)
<<<ftend>>> 필수 상품의 마지막을 알리는 필드
*/
$lt = "<<<";
$gt = ">>>";
$shop_url = G5_SHOP_URL;
$data_url = G5_DATA_URL;
$sql =" select * from {$g5['g5_shop_item_table']} where it_use = '1' order by ca_id";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
$cate1 = $cate2 = $cate3 = $cate4 = "";
$caid1 = $caid2 = $caid3 = $caid4 = "";
$caid1 = substr($row['ca_id'],0,2);
$row2 = sql_fetch(" select ca_name from {$g5['g5_shop_category_table']} where ca_id = '$caid1' ");
$cate1 = $row2['ca_name'];
$caid2 = $caid3 = $caid4 = "";
$cate2 = $cate3 = $cate4 = "";
if (strlen($row['ca_id']) >= 8) {
$caid4 = substr($row['ca_id'],0,8);
$row2 = sql_fetch(" select ca_name from {$g5['g5_shop_category_table']} where ca_id = '$caid4' ");
$cate4 = $row2['ca_name'];
}
if (strlen($row['ca_id']) >= 6) {
$caid3 = substr($row['ca_id'],0,6);
$row2 = sql_fetch(" select ca_name from {$g5['g5_shop_category_table']} where ca_id = '$caid3' ");
$cate3 = $row2['ca_name'];
}
if (strlen($row['ca_id']) >= 4) {
$caid2 = substr($row['ca_id'],0,4);
$row2 = sql_fetch(" select ca_name from {$g5['g5_shop_category_table']} where ca_id = '$caid2' ");
$cate2 = $row2['ca_name'];
}
// 배송비계산
$delivery = get_item_sendcost2($row['it_id'], $row['it_price'], 1);
// 상품이미지
$img_url = get_it_imageurl($row['it_id']);
// 포인트
$it_point = get_item_point($row);
$str = <<< HEREDOC
{$lt}begin{$gt}
{$lt}mapid{$gt}{$row['it_id']}
{$lt}pname{$gt}{$row['it_name']}
{$lt}price{$gt}{$row['it_price']}
{$lt}pgurl{$gt}$shop_url/item.php?it_id={$row['it_id']}
{$lt}igurl{$gt}$img_url
{$lt}cate1{$gt}$cate1
{$lt}cate2{$gt}$cate2
{$lt}cate3{$gt}$cate3
{$lt}cate4{$gt}$cate4
{$lt}caid1{$gt}$caid1
{$lt}caid2{$gt}$caid2
{$lt}caid3{$gt}$caid3
{$lt}caid4{$gt}$caid4
{$lt}model{$gt}
{$lt}brand{$gt}
{$lt}maker{$gt}{$row['it_maker']}
{$lt}origi{$gt}{$row['it_origin']}
{$lt}deliv{$gt}$delivery
{$lt}event{$gt}
{$lt}coupo{$gt}
{$lt}pcard{$gt}
{$lt}point{$gt}$it_point
{$lt}mvurl{$gt}
{$lt}selid{$gt}
{$lt}barcode{$gt}
{$lt}ftend{$gt}
HEREDOC;
// 091223 : 네이버에서는 아직 utf-8 을 지원하지 않고 있음
echo iconv('utf-8', 'euc-kr', $str);
}
$content = ob_get_contents();
ob_end_clean();
echo $content;
?>
카츠님 리자님 답변에 감사드립니다.
어제는 답변작성이 되지 않았습니다.(간만에 들어왔더니)
카츠님 말씀..DB쿼리에서 실시간 생성하는 부분에 상품갯수가 많다거나
리자님 말씀..
아마도 버퍼에 쌓인 데이터의 용량이 초과하여 iconv 함수에서 제대로 charset 을 변환하지 못한것 같습니다.
모두 맞는 말씀인거 같습니다.
리자님이 올려주신 파일은 어제 영카트 담당자님에게 메일을 보내서 받은 내용과 같습니다.
현재 http://www.mizcook.co.kr/shop/price/naver.php 로딩하면 노출이 되다가 응답없음으로 바뀌네요.
상품갯수가 많아 메모리 부족이라면...현재 상품을 계속 업그레이드 중인데...
무슨 해결책이 없을까요?
카츠님이 말씀하신 naver.php에서는 텍스트파일을 읽어와서 뿌려주는 형태로 해야 할 듯 싶네요.
이 부분은 수동으로 작성해야 하는 부분인거죠?
이렇게라도 해야 할듯 한데요...제가 php를 몰라서 그러는데 어떻게 하는건지..
현재는 한글이 깨지고 있습니다..
답답하다보니 말에 두서가 없네요.
답변해주신 카츠님 리자님 답변에 다시 감사드립니다.
다시 이 글을 읽으신다면 조언 부탁드립니다