안녕하세요

 

오랫만에 PHP 관련 글을 올리네요.

 

이번 글은 API 연동을 하다보니 JSON 데이터를 POST방식으로 주고 받는 경우가 발생하여

내용을 정리해보았습니다. 

 

많은 도움이 되면 좋을 것 같습니다.^^

 

//POST로 전송할 JSON 데이터 샘플
{
    "user" : { "id" : "xxxxxxx"},
    "log":[
              {
                  "id":"1",
                  "log_val": "43"

              },
              {
                  "id":"2",
                  "log_val": "44"
              }
	  		]

}

//JSON 결과 데이터 샘플
{
    "result" : "200",
    "msg":[
            {
                "id":"1",
                "msg_val": "43_OK"

            },
            {
                "id":"2",
                "msg_val": "44_OK"
            }
          ]

}


<?php
//---------------------CURL를 활용하여 JSON데이터를 POST방식으로 요청하여 JSON데이터로 받기--------------------

//요청 서버 URL 셋팅
$url = "요청할 서버 URL";

//추가할 헤더값이 있을시 추가하면 됨
$headers = array(
		"content-type: application/json",
		"accept-encoding: gzip"
);

//POST방식으로 보낼 JSON데이터 생성
$arr_user = array();
$arr_log = array();
$arr_post = array();

$arr_user["id"] = "xxxxxxx";

$arr_post["user"] = $arr_user;

$arr_log[0]["id"] = "1";
$arr_log[0]["log_val"] = "43";
$arr_log[1]["id"] = "2";
$arr_log[1]["log_val"] = "44";

$arr_post["log"] = $arr_log;

//배열을 JSON데이터로 생성
$post_data = json_encode($arr_post);

//CURL함수 사용
$ch=curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
//header값 셋팅(없을시 삭제해도 무방함)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//POST방식
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, true);
//POST방식으로 넘길 데이터(JSON데이터)
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);

$response = curl_exec($ch);

if(curl_error($ch)){
    $curl_data = null;
} else {
    $curl_data = $response;
}

curl_close($ch);

//받은 JSON데이터를 배열로 만듬
$json_data = json_decode($curl_data,true);
//배열 제어
if($json_data["result"] == "200"){
	$cnt = 0;
	foreach($json_data["msg"] as $msg_data){
		foreach($msg_data as $msgval_data){
			//msg_val값만 출력합니다.
			echo $msgval_data[$cnt]["msg_val"];
			$cnt++;
		}
	}
}

exit;
?>

 

 

러닝 PHP : PHP 입문에서 프레임워크를 활용한 실전 프로그래밍까지(PHP 7 기반)

COUPANG

www.coupang.com

 

안녕하세요

 

이번 내용은 php에서 mobiledetect 클래스를 활용하여 모바일페이지에서 디바이스 정보를 획득하는 방법을 알려드리겠습니다.

 

일반적으로 자주 사용되는 부분은 아니지만 간혹 모바일 환경에서 웹페이지를 통해 알 수 있는 최소한의 디바이스 정보를 획득하고 싶은 경우가 발생할때 사용하면 좋을 것 같습니다.

 

아래와 같이 따라 하시면 큰 문제없이 금방 하실 수 있으실 겁니다.

 

1. Mobile_Detect.php 를 다운받기 위해 http://mobiledetect.net/ 를 접속해서 Download 버튼을 클릭한다.

   (ZIP파일 압축해제 후 압축풀더 들어가면 Mobile_Detect.php 파일이 보임)

 

2. 예제 소스(아래 예제소스가 있는 파일과 Mobile_Detetc.php 파일위치는 동일해야 함)

   (모바일페이지 획득가능 정보 - 모바일여부/디바이스 제조사/디바이스OS/디바이스OS 버전)

<?php

require_once 'Mobile_Detect.php';      


$detect = new Mobile_Detect;  
//예제소스를 호출하는 웹브라우져가 모바일인지 아닌지를 체크함(1:모바일, 2:PC 등)
$devicetype = $detect->isMobile() ? 1 : 2;   

//모바일일때만 처리 
if($devicetype == 1){ 
    $devicemake = "";     //제조사 변수 초기화
    foreach($detect->getRules() as $name => $regex){ 
        if(substr($name, -2) == "OS") break;      //제조사 정보만을 위해 OS정보는 제외처리(데모참조)
        $check = $detect->{'is'.$name}(); 
        if($check) { 
             $devicemake = str_replace("Tablet","",$name);   //Tablet정보도 있음(데모참조)
             break; 
        } 
     }

    //디바이스OS 체크함(iOS, Android, ETC-WindowsMobile등)
     $deviceos = $detect->isiOS() ? "iOS" : ($detect->isAndroidOS() ? "Android" : "ETC"); 
     if($deviceos == "iOS"){ 
         $deviceosv = $detect->version("iOS");    //디바이스 OS 버전 정보(iOS)
     } else if ($deviceos == "Android"){ 
         $deviceosv = $detect->version("Android");  //디바이스 OS 버전 정보(Android)
     } else { 
         $deviceosv = $detect->version("Mobile");   //디바이스 OS 버전 정보(ETC)
     } 
} 

?>
 

러닝 PHP : PHP 입문에서 프레임워크를 활용한 실전 프로그래밍까지(PHP 7 기반)

COUPANG

www.coupang.com

 

3. 데모는 http://demo.mobiledetect.net/ 페이지를 참조하시길 바랍니다.

   (화면에 보이는 메서드 및 값을 확인하면 개발에 도움이 되실겁니다. 참고로 데모소스는 https://github.com/serbanghita/Mobile-Detect/tree/master/examples 에서 demo.php 파일을 확인하시면 되실것 같습니다.)

 

* github URL : https://github.com/serbanghita/Mobile-Detect

 

위의 내용은 저한테 최소 필요한 부분만 파악하여 정리한 내용이라 부족한 부분이 많습니다.

 

지속적으로 도움글 많이 주시면 고맙겠습니다.

 

오늘 하루도 즐거운 하루 되십시요^^ 이만 마치겠습니다.^^

안녕하세요.

 

자료를 수집하다 보면 기본 자료들을 웹페이지 검색을 통해서 가져오는 부분이 많으실텐데요.

 

이때 개발자이다보니 크롤링을 해오면 되지 않을까 싶어 검색해보니 간단한 방법이 있어 소개할려고 합니다.

(개발자가 창조적이라는 말을 많이 듣지만 저도 검색으로 많은 부분을 해결합니다.)

 

오늘은 간단하게 웹페이지를 크롤링하는 방법을 알아보겠습니다.

 

예제로 tv줌 인기랭킹의 순위 및 프로그램명을 가져올까 합니다.

 

1. 웹브라우저에서 tv줌 인기랭킹 페이지를 확인합니다.(https://tv.zum.com/ranking)

 

2. 웹브라우저의 개발자도구(F12)를 통해 HTML 구조를 파악합니다. 

   (영역 : 빨간색, 순위값 : 녹색, 프로그램명 : 파란색)

 

<예시 : tv줌 예시화면>

3. simple_html_dom 사이트에서 simple_html_dom.php 다운로드를 합니다.

   다운로드 URL : https://sourceforge.net/projects/simplehtmldom/files/simplehtmldom/ 에서 최신버전 다운로드

                       (ZIP파일 압축해제 후 압축풀더 들어가면 simple_html_dom.php 파일이 보임)

   온라인 설명서 URL : http://simplehtmldom.sourceforge.net/manual.htm 개발시 참조

 

4. 개발소스

<?php

header('Content-Type: text/html; charset=UTF-8'); 

//simple_html_dom php 파일을 include함 
include('simple_html_dom.php'); 

//가져올 url 설정
$url = 'https://tv.zum.com/ranking'; 
$html = @file_get_html($url); 

unset($arr_result); 
$arr_result = $html->find('div.tv_wrap>a');   //1위 ~ 3위 랭킹순위 및 프로그램명 가져오기
if(count($arr_result) > 0){                         //위의 이미지에서 a 태그에 포함되는 html dom 객체를 가져옴
    foreach($arr_result as $e){

        //children 속성을 이용해 맨 처음(0)의 태그 가져오기(<span class="rank_num">1</span>값 가져옴)
        echo $e->children(0)->plaintext.':';     //위의 값 중 1 값을 가져옴

        //children 속성을 이용해 맨 두번째(1)의 태그(<div class="tv_info">) 안의 두번째(1)의 태그 가져오기(<p class="program">미스트롯</p>값 가져옴)
        echo $e->children(1)->children(1)->plaintext.'<br/>';     //위의 값 중 미스트롯 값을 가져옴
    } 
} else { 
    echo "<br/>"; 
} 

unset($arr_result); 
$arr_result = $html->find('div.list_wrap>div.list');   //4위 ~ 50위 랭킹순위 및 프로그램명 가져오기
if(count($arr_result) > 0){ 
    foreach($arr_result as $e){ 
        echo $e->children(1)->plaintext.':'; 
        echo $e->children(2)->children(1)->children(0)->plaintext.'<br/>'; 
    } 
} else { 
    echo "<br/>"; 
}


exit;

?>
 

정보문화사] 성공적인 웹 프로그래밍 PHP와 MySQL 단품

COUPANG

www.coupang.com

 

위와 같이 html 구조를 분석하여 가져오면 간단하게 해결할 수 있습니다.

 

하시면서 궁금한 사항 있으면 글 남겨주세요.^^

 

서로 서로 도움이 될 수 있으면 좋겠습니다.^^

 

오늘도 행복한 하루 되십시요^^

+ Recent posts