상세 내역을 db화 할때 full text가 encoding된 html text일 수 있다

등록할때 보통 text를 escape하거리 html encoding하여 db에 등록하곤한다.


angularjs 사용에서 db에 들어있는 html text를 화면에 바인딩 하려면 ng-bind-html을 이용한다.

html로 표현하며 바인딩하기


encoding된 html text를 ng-bind-html 로 바인딩 하면 decoding하여 표현만 하고 html이 적용된 모습으로 화면에 표현되진 않는다.

그래서

ng-bind-html을 이용할때는 decoding된 html full text를 $scope 영역에 담고 사용한다.




<p>상품상세 부분 html encoded text will be added</p>

<ol>

<li>상품의 상세정보를 기술한다</li>

<li>이미지를 첨부할 수 있다<img src="https://t1.daumcdn.net/cfile/tistory/996B28455C1F6FB206" alt="" width="530" height="808" /></li>

<li>기타 <a href="http://doitforyou.co.kr">링크를</a> 추가할 수 있따.</li>

</ol>


==>ENCODED HTML

&lt;p&gt;상품상세 부분 html encoded text will be added&lt;/p&gt;

&lt;ol&gt;

&lt;li&gt;상품의 상세정보를 기술한다&lt;/li&gt;

&lt;li&gt;이미지를 첨부할 수 있다&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996B28455C1F6FB206&quot; alt=&quot;&quot; width=&quot;530&quot; height=&quot;808&quot; /&gt;&lt;/li&gt;

&lt;li&gt;기타 &lt;a href=&quot;http://doitforyou.co.kr&quot;&gt;링크를&lt;/a&gt; 추가할 수 있따.&lt;/li&gt;

&lt;/ol&gt;'


=>



c#을 사용하고 있어

결과 dataset의 특정필드를 htmldecode시켜서 VIEW페이지로 리턴한다.


        private void getProdPrice(String sParam1)

        {

            bivrProdM oProd = new bivrProdM();


            DataSet dsResult = null;


            dsResult = oProd.GetProdPrice(sParam1);


            dsResult.Tables[0].Rows[0]["CONTENTS1"] = Server.HtmlDecode(dsResult.Tables[0].Rows[0]["CONTENTS1"].ToString());


            String jsonString = JsonConvert.SerializeObject(dsResult);

            Response.Write(jsonString);

        }




html page

 <div class="col-xs-12 col-sm-10 blog-content">

                                <a href="#"><img class="img-responsive img-blog" check-image ng-src="{{imageUrl}}" width="100%" alt="" /></a>

                                <h2><a href="blog-item.html">Consequat bibendum quam liquam viverra</a></h2>

                                <h3>Curabitur quis libero leo, pharetra mattis eros. Praesent consequat libero eget dolor convallis vel rhoncus magna scelerisque. Donec nisl ante, elementum eget posuere a, consectetur a metus. Proin a adipiscing sapien. Suspendisse vehicula porta lectus vel semper. Nullam sapien elit, lacinia eu tristique non.posuere at mi. Morbi at turpis id urna ullamcorper ullamcorper.</h3>

                                <a class="btn btn-primary readmore" href="blog-item.html">Read More <i class="fa fa-angle-right"></i></a>

                                htmlTest : [{{AddHtmlData}}] vs. [<span ng-bind-html="AddHtmlData"></span>]

                            </div>





--------------------------------------------

angularjs사용하기 위한 스크립트

--------------------------------------------



<script src="https://code.angularjs.org/1.7.6/angular.min.js"></script>

<script src="https://code.angularjs.org/1.7.6/angular-sanitize.min.js"></script>

    <script>


        var app = angular.module('myApp', ['ngSanitize']);


.......


   $http.get("/View/getProductDetails.aspx?oP=" + oParam1)

                .then(function (response) {

                    $scope.PDTLNAME = response.data.Table[0].PDTLNAME;

                    $scope.PINITAMT = response.data.Table[0].PINITAMT;

                    $scope.PTAXAMT = response.data.Table[0].PTAXAMT;

                    $scope.CONTENTSTITLE = response.data.Table[0].CONTENTSTITLE;

                   var  CONTENTS1= response.data.Table[0].CONTENTS1;

                    


                  //  var aa = "&lt;p&gt;상품상세 부분 html encoded text will be added&lt;/p&gt;&lt;ol&gt;&lt;li&gt;상품의 상세정보를 기술한다&lt;/li&gt;&lt;li&gt;이미지를 첨부할 수 있다&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996B28455C1F6FB206&quot; alt=&quot;&quot; width=&quot;530&quot; height=&quot;808&quot; /&gt;&lt;/li&gt;&lt;li&gt;기타 &lt;a href=&quot;http://doitforyou.co.kr&quot;&gt;링크를&lt;/a&gt; 추가할 수 있따.&lt;/li&gt;&lt;/ol&gt;";

                    $scope.AddHtmlData = CONTENTS1;


                   


                    //alert(response.data.records);

                }, function (response) {


                    //return $q.reject(response.status + " " + response.data.error);

                    alert(response.status + " " + response.data.error);

                });





led strip(네오픽셀)로 크리스마스 트리 만들기

준비물 : 아두이노, Adafruit Neopixel, 종이, 납땜기, 전선



아두이노에서 "Adafruit Neopixel" 라이브러리 다운로드 하기 =>  스케치 > 라이브러리 포함하기 > 라이브러리 관리




생각했던 것 보다 예쁨(*________________*)


c문법,  C를 최신언어로 마이그 하면서 자주 보게되는 것 중 하나  strcmp/strncmp



c coding >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


/*

 * test.c

 *

 *  Created on: 2018. 11. 17.

 *      Author: DIFY

 */


#include <stdio.h>

#include <string.h>

#define _CRT_SECURE_NO_WARNINGS


int main()

{

int iresult = 0;

char sResult[30];

char * sSample1 = "ABCDA";

char * sSample2 = "ABCD";

char * sSample3 = "ABCDA";


char * iSample1 = "12345";

char * iSample2 = "1234";

char * iSample3 = "12345";


   /*char*************************************************************/

iresult = strcmp( sSample1, sSample2 );

sprintf(sResult, "%d", iresult);    // %d정수를 문자열로 set

printf("[sSample1:%s,sSample2:%s]=>결과값(sSample1>sSample2) : %s\n", sSample1, sSample2, sResult);


iresult = strcmp( sSample2, sSample1 );

sprintf(sResult, "%d", iresult);

printf("[sSample1:%s,sSample2:%s]=>결과값(sSample1<sSample2) : %s\n", sSample1, sSample2,sResult);


iresult = strcmp( sSample1, sSample3 );

sprintf(sResult, "%d", iresult);

printf("[sSample1:%s,sSample3:%s]=>결과값(sSample1=sSample3) : %s\n", sSample1, sSample3,sResult);


iresult = strncmp( sSample1, sSample2,4 );

sprintf(sResult, "%d", iresult);

printf("[sSample1:%s,sSample2:%s]=>결과값(sSample1,sSample2 4자리까지비교) : %s\n",sSample1, sSample2, sResult);


iresult = strncmp( sSample1, sSample2,5 );

sprintf(sResult, "%d", iresult);

printf("[sSample1:%s,sSample2:%s]=>결과값(sSample1,sSample2 5자리까지비교(ASCII 코드값)) : %s\n", sSample1, sSample2,sResult);



iresult = strncmp( sSample2, sSample1,5 );

sprintf(sResult, "%d", iresult);

printf("[sSample2:%s,sSample1:%s]=>결과값(sSample2,sSample1 5자리까지비교(ASCII 코드값)) : %s\n", sSample2, sSample1,sResult);



/*int*************************************************************/

iresult = strcmp( iSample1, iSample2 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample2:%s]=>결과값(iSample1>iSample2) : %s\n", iSample1, iSample2, sResult);


iresult = strcmp( iSample2, iSample1 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample2:%s]=>결과값(iSample1<iSample2) : %s\n", iSample1, iSample2,sResult);


iresult = strcmp( iSample1, iSample3 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample3:%s]=>결과값(iSample1=iSample3) : %s\n", iSample1, iSample3,sResult);


iresult = strncmp( iSample1, iSample2,4 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample2:%s]=>결과값(iSample1,iSample2 4자리까지비교) : %s\n",iSample1, iSample2, sResult);


iresult = strncmp( iSample1, iSample2,5 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample2:%s]=>결과값(iSample1,iSample2 5자리까지비교(ASCII 코드값)) : %s\n", iSample1, iSample2,sResult);



iresult = strncmp( iSample2, iSample1,5 );

sprintf(sResult, "%d", iresult);

printf("[iSample2:%s,iSample1:%s]=>결과값(iSample2,iSample1 5자리까지비교(ASCII 코드값)) : %s\n", iSample2, iSample1,sResult);



return 0;


}


 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

console 결과값

[sSample1:ABCDA,sSample2:ABCD]=>결과값(sSample1>sSample2) : 1

[sSample1:ABCDA,sSample2:ABCD]=>결과값(sSample1<sSample2) : -1

[sSample1:ABCDA,sSample3:ABCDA]=>결과값(sSample1=sSample3) : 0

[sSample1:ABCDA,sSample2:ABCD]=>결과값(sSample1,sSample2 4자리까지비교) : 0

[sSample1:ABCDA,sSample2:ABCD]=>결과값(sSample1,sSample2 5자리까지비교(ASCII 코드값)) : 65

[sSample2:ABCD,sSample1:ABCDA]=>결과값(sSample2,sSample1 5자리까지비교(ASCII 코드값)) : -65

[iSample1:12345,iSample2:1234]=>결과값(iSample1>iSample2) : 1

[iSample1:12345,iSample2:1234]=>결과값(iSample1<iSample2) : -1

[iSample1:12345,iSample3:12345]=>결과값(iSample1=iSample3) : 0

[iSample1:12345,iSample2:1234]=>결과값(iSample1,iSample2 4자리까지비교) : 0

[iSample1:12345,iSample2:1234]=>결과값(iSample1,iSample2 5자리까지비교(ASCII 코드값)) : 53

[iSample2:1234,iSample1:12345]=>결과값(iSample2,iSample1 5자리까지비교(ASCII 코드값)) : -53




서식
문자
출력 형태
c 문자
d or i 부호 있는 십진법으로 나타난 정수
e 지수 표기법(Scientific notation) 으로 출력하되, e 문자를 이용한다.
E 지수 표기법(Scientific notation) 으로 출력하되, E 문자를 이용한다.
f 십진법으로 나타낸 부동 소수점 수
g %e나 %f 보다 간략하게 출력
G %E나 %f 보다 간략하게 출력
o 부호 있는 팔진수
s 문자열
u 부호없는 십진법으로 나타낸 정수
x 부호없는 16 진법으로 나타낸 정수 (소문자 사용)
X 부호없는 16 진법으로 나타낸 정수 (대문자 사용)
p 포인터 주소
n 아무것도 출력하지 않는다. 그 대신, 인자로 부호 있는 int 형을 가리키는 포인터를 전달해야 되는데, 여기에 현재까지 쓰여진 문자 수가 저장된다.
(참고, eclipse에서 c 사용하기, http://blog.moramcnt.com/?p=1272 )


'프로그래밍 > C언어' 카테고리의 다른 글

C언어 strcmp/strncmp문법알아보기  (0) 2018.11.17


C#에서 mariadb 사용하기

https://dev.mysql.com/downloads/connector/net/

Download Connector/NET(mysql-connector-net-8.0.13.msi)

mysql-connector-net-8.0.13.msi



 

C#프로젝트 [참조]에 라이브러리를 추가한다.(1개 : MySql.Data.dll)

C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.13\Assemblies\v4.5.2\MySql.Data.dll




<dbconnection class>에서 아래 라이브러리 이용하여 커넥션 클래스 구성.

오라클,msSql, mariadb 모두 비슷한 패턴임.

------------------------------------------------

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Data;

using MySql.Data.MySqlClient;


namespace testWebApplication1

{

    public class MariaDbAccess

    {


        #region 멤버변수


        private MySqlConnection oCnn = null;

        /// <summary>

        /// DB 연결 스트링

        /// </summary>

        private string _connectionString = "SERVER=서버;DATABASE=데이타베이스명;UID=아이디;PASSWORD=패스워드;";


------------------------------------------------


'프로그래밍 > c#' 카테고리의 다른 글

c#에서 mariadb사용하기  (0) 2018.11.10
WebBrowser이용한 스크린스크래핑  (0) 2018.05.09
WebBrowser.DocumentText 한글깨짐  (0) 2018.05.07
using MySqlConnector  (0) 2018.05.07

Open Api 를 이용해서 Request & Response 된 데이타를 

테이블에 저장하도록 한다.

Schema구성


>kakao open api 분석

>스키마구성



>mysql table 스크립트

-- <table SCHEMA> START-----------------------

CREATE TABLE `requestdata` (
`SQSeq` bigint(20) NOT NULL AUTO_INCREMENT,
`SearchKind` varchar(20) NOT NULL DEFAULT 'WEB',
`Query` varchar(100) NOT NULL,
`SearchDate` date NOT NULL,
PRIMARY KEY (`SQSeq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `responsedata` (
`SQSeq` bigint(20) NOT NULL,
`SubSeq` bigint(20) NOT NULL,
`Title` varchar(300) NOT NULL DEFAULT 'ETC',
`Contents` varchar(4000) DEFAULT NULL,
`Url` varchar(1000) DEFAULT NULL,
`Thumbnail_url` varchar(1000) DEFAULT NULL,
`Authors` varchar(1000) DEFAULT NULL,
`Price` int(11) DEFAULT NULL,
`Width` int(11) DEFAULT NULL,
`Height` int(11) DEFAULT NULL,
`Category` int(11) DEFAULT NULL,
`Datetime` date DEFAULT NULL,
`Etc` varchar(200) DEFAULT NULL,
PRIMARY KEY (`SQSeq`,`SubSeq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- <table SCHEMA> END-----------------------



>스토어 프로시저로 등록/삭제

-- [START]요청 REQUESTDATA INSERT----------------

DELIMITER //

DROP PROCEDURE IF EXISTS SP_REQUESTDATA_INSERT //

CREATE PROCEDURE SP_REQUESTDATA_INSERT
(
IN InSearchKind varchar(20),
IN InQuery varchar(100),
OUT NewSQSeq bigint(20)
)

BEGIN
INSERT INTO requestdata
(
SearchKind
,Query
,SearchDate
)
VALUES
(
InSearchKind,
InQuery,
sysdate()
);

-- Auto Increment 값 조회
SELECT LAST_INSERT_ID()
INTO NewSQSeq; -- OUT 파라메터 담기

END//

DELIMITER ;
-- [END]요청 REQUESTDATA INSERT------------------


-- [START] 요청/결과 삭제 SP_REQUESTDATA_DELETE----
DELIMITER //

DROP PROCEDURE IF EXISTS SP_REQUESTDATA_DELETE //

CREATE PROCEDURE SP_REQUESTDATA_DELETE
(
IN InSQSeq bigint(20)
)

BEGIN

declare iResult bigint(20);
set iResult = 0;

DELETE FROM requestdata
WHERE SQSeq = InSQSeq;

DELETE FROM responsedata
WHERE SQSeq = InSQSeq;

END//

DELIMITER ;
-- [END]요청/결과 삭제 SP_REQUESTDATA_DELETE-------


-- [START]결과 SP_RESPONSEDATA_INSERT------------
DELIMITER //

DROP PROCEDURE IF EXISTS SP_RESPONSEDATA_INSERT //

CREATE PROCEDURE SP_RESPONSEDATA_INSERT
(
IN InSQSeq   bigint(20)
,IN InTitle   varchar(300)
,IN InContents    varchar(4000)
,IN InUrl varchar(1000)
,IN InThumbnail_url   varchar(1000)
,IN InAuthors varchar(1000)
,IN InPrice   int(11)
,IN InWidth   int(11)
,IN InHeight  int(11)
,IN InCategory    int(11)
,IN InDatetime    varchar(100)
,IN InEtc varchar(200)
,OUT OutResult bigint(20)
)

BEGIN

declare NewSubSeq bigint(20) default(0);

SELECT
IFNULL(MAX(SUBSEQ),0) + 1 into NewSubSeq
FROM RESPONSEDATA
WHERE SQSeq = InSQSeq;
SET OutResult = NewSubSeq;

INSERT INTO responsedata
(
SQSeq 
,SubSeq   
,Title    
,Contents 
,Url  
,Thumbnail_url    
,Authors  
,Price    
,Width    
,Height   
,Category 
,Datetime 
,Etc  
)
values
(
InSQSeq   
,NewSubSeq
,InTitle  
,InContents   
,InUrl    
,InThumbnail_url  
,InAuthors    
,InPrice  
,InWidth  
,InHeight 
,InCategory   
,date(InDatetime) 
,InEtc    
);


END//

DELIMITER ;
-- [END]결과 SP_RESPONSEDATA_INSERT--------------



>프로시저실행해서 등록하기


call SP_REQUESTDATA_INSERT('Book','삶의철학산책',@NewSQSeq);
select @NewSQSeq;

call SP_RESPONSEDATA_INSERT(1,'드 보통의 삶의 철학산책','복잡하고 힘겨운 삶을 유쾌하게 만드는 삶의 거장들이 알려주는 행복의 철학. 인기없음, 가난, 좌절, 부당함, 실연, 고통에 대한 허브 치료와도 같은 유쾌한 위안을 한권의 책으로 엮었다.','http://book.daum.net/detail/book.do?bookid=KOR9788984980624','https://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788984980624%3Fmoddttm=20160223080929','알랭 드 보통',17000,0,0,5,'2002-04-25T00:00:00.000+09:00','8984980625 9788984980624',@OutResult);

select @OutResult;

call SP_RESPONSEDATA_INSERT(1,'고대 로마+한강역사문화탐사+삶의철학산책','&#39;고대 문명 시리즈&#39; 두 번째 권으로 고대 로마를 찾아간다. 로마의 사회, 정치, 문화, 예술의 다양한 면모를 가능한 명료하고 직접적으로 기술하여 로마를 직접 체험하는 느낌을 가질 수...','http://book.daum.net/detail/book.do?bookid=BOK00000039062LI','http://t1.daumcdn.net/thumb/P72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FBOK00000039062LI%3Fmoddttm=20150609170927','안나 마리아 리베라티',95000,0,0,0,'2003-07-20T00:00:00.000+09:00','0004953282 0100004953286',@OutResult);

response된data.txt




'프로그래밍 > PHP' 카테고리의 다른 글

Open Api Request / Response Schema구성&실행  (0) 2018.08.19
curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26

다움API 3번째 도서검색.

이미지,블로그,웹,도서,푸시알림까지 되면  

실제 필요한 물건을 만들수 있지 않을까..... 생각아 좀더 나거라~


오픈API 사용량에 관계없이 무제한으로 쓸수있는지 궁금해지네.... 

스크래핑 하지 않고 이렇게 API호출해서 받으니 쉽고 빠르고 좋다.


testpage 도서검색) http://doitforyou.co.kr/test/curl_daum_search_book.php

testpage 웹검색) http://doitforyou.co.kr/test/curl_daum_search_web.php

testpage 이미지검색) http://doitforyou.co.kr/test/curl_daum_search_image.php


<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {APIKEY} ');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
//print_r(curl_getinfo($curl_session));
curl_close($curl_session);
return $return_data;
}
}


$path = '/v2/search/book';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1,
'size' => 50,
'query' => 'PHP'
,
'category' => 33
));

$res = request($path, $params, $content_type);

//header('Content-Type: application/' . $content_type . '; charset=utf-8');
// echo $res;
//echo $res;
//var_dump($res);
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환
// var_dump( $dt);

$tCount = $dt->meta->total_count;
$iCnt = count($dt->documents);
echo "<br>";
echo "tCnt_totalcnt:".$tCount . "/" ."iCnt_documents:".$iCnt;
echo "<br>";

for ($i=0; $i < $iCnt; $i++)
{
echo "<p>";

echo "title:".$dt->documents[$i]->title."<br>";
echo "contents:".$dt->documents[$i]->contents."<br>";
echo "url:".$dt->documents[$i]->url."<br>";
echo "isbn:".$dt->documents[$i]->isbn."<br>";

$iCntAuthor = 0;
$iCntAuthor = count($dt->documents[$i]->authors);

for($z=0; $z < $iCntAuthor; $z++)
{
if($z==0){
echo "authors:";
}
echo $dt->documents[$i]->authors[$z];
if($z <> ($iCntAuthor-1) )
{
echo ",";
};
}

echo "</p>";

}
?>


'프로그래밍 > PHP' 카테고리의 다른 글

Open Api Request / Response Schema구성&실행  (0) 2018.08.19
curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26

curl로 받은 데이터로 html 형식으로 표현할때 아래에서

header('Content-Type: application/' . $content_type . '; charset=utf-8');

주석처리 해야한다.


아래코드는 

keyword로 검색한 후 결과값으로 이미지를 화면에 보여준다.

thumbnail_url 로 img src에 세팅하면....

속도가 아주~ 빠르다. 내가 검색한 데이타의 image가 이렇게 빠르게 보여지는게 놀랍다고 느껴진다.


json object 개수를 셀때 count를 이용해서 확인하고 

for문으로 image 를 그리고 있다. count($dt->documents)




<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title> image 검색하기 </title>
</head>
<body>

<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {KAKAORESTFULAPIKEY}');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
//print_r(curl_getinfo($curl_session));
curl_close($curl_session);
return $return_data;
}
}


$path = '/v2/search/image';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1, //조회건수가 많으면 page수 변경하며 추가조회가능
'size' => 20, //한 페이지에 조회되는 데이터 건수
'query' => 'doitforyou.co.kr'
));

$res = request($path, $params, $content_type);

// header('Content-Type: application/' . $content_type . '; charset=utf-8');
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환

//var_dump($dt);

$tCount = $dt->meta->total_count;
$iCnt = count($dt->documents);
//echo "\r\n";
//echo "tCount:".$tCount;
//echo "icnt:". count($dt->documents);
for ($i=0; $i < $iCnt; $i++)
{
echo "<img src='".$dt->documents[$i]->thumbnail_url."'/>";
if((($i+1)%10 == 0 ) && ($i != 0)){
echo "<br>";
};
//echo "\r\n";
// echo $dt->documents[$i]->doc_url;
//echo "\r\n";
}
?>

</body>
</html>



'프로그래밍 > PHP' 카테고리의 다른 글

Open Api Request / Response Schema구성&실행  (0) 2018.08.19
curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26

php curl을 이용하여 카카오 오픈api 검색엔진 사용하기


아래 예제는 다움포탈에서 doitforyou.co.kr로 검색했을경우 블로그 검색데이타(json type)를 가져와서

블로그title, 블로그url를 찍어보는 예제이다.


API는 아래 $path 에 따라서 검색되는 데이타가 달라진다.


$path = '/v2/search/blog';  --블로그

$path = '/v2/search/web';   --웹

$path = '/v2/local/search/address'; --주소


이 API를 이용해서 아이디어가 떠오른다면 APP또는 다른 서비스로 발전할 수 있을것 같다.


출처) https://devtalk.kakao.com .

 json 파싱부분 수정하더 정확한 url잊음

<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {APIKEYAPIKEYAPIKEY} ');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
curl_close($curl_session);
return $return_data;
}
}

$path = '/v2/search/blog';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1,
'size' => 10,
'query' => 'doitforyou.co.kr'
));

$res = request($path, $params, $content_type);

header('Content-Type: application/' . $content_type . '; charset=utf-8');
echo $res;
//var_dump($res);
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환

$tCount = $dt->meta->total_count;
echo "\r\n";
echo "tCount:".$tCount;
echo "\r\n";

for ($i=0; $i < $tCount; $i++)
{
echo $dt->documents[$i]->title;
echo "\r\n";
echo $dt->documents[$i]->url;
echo "\r\n";
}
?>


'프로그래밍 > PHP' 카테고리의 다른 글

curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26
php 패스워드 암호화 bcript  (0) 2018.05.02

Windows에서 php CURL 사용하기

오픈API를 사용하기 위해서 php에서 CURL이 동작하도록 설정한다..

 

Step1) C:\windows\php.ini 의 파일 수정

extension=php_curl.dll  사용하도록 수정

Step2) C:\APMorg\php 폴더의

libeay32.dll, ssleay32.dll  C:\Windows\System32 폴더로 복사

Step3) 윈도우 서비스의 아파치를 재시작 한다.

       아파치 환경에서 php를 구동하기 위해서 php.ini정보를 읽어 서비스 하기 때문에 재 기동 해야함.





phpinfo.php를 통해 반영된것 확인 가능하다.

curl

cURL supportenabled
cURL Information7.54.1


또는 아래 코드로도 확인가능하다.


<?php

if(extension_loaded("curl")){

echo "cUrl extension is loaded";

}else{

 echo "cUrl extension is not available";

}

?>


로컬 개발PC : 윈도우8 apm세팅

웹호스팅 중인 : doitforyou.co.kr 의 curl정보 확인. 

curl

cURL supportenabled
cURL Information7.29.0
Age3

 

'프로그래밍 > PHP' 카테고리의 다른 글

curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26
php 패스워드 암호화 bcript  (0) 2018.05.02
unlink(=delete) 메소드 이용하기  (0) 2018.04.22

dustsensor.ino

dustsensorv2.ino



첨부된 2 가지  케이스로 코딩됨.

미세먼지 측정센서로 측정된 미세먼지 농도를 
16x2 LCD 에 표현하기.


아두이노 코딩도 계속하다 보니 자연스럽게 되는것 같다. 전자회로도 또한 친숙해지는것 같고.
연습이 완벽하게 만든다고 했나? 생각보다 쉽게 만들어짐에 놀라웠다.

Practice makes perfect, thanks.


#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int Vo = A0;
int V_LED = 2;

float Vo_value = 0;
float Voltage = 0;
float dustDensity = 0;
float dustCleanVoltage = 0.44;
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;

void setup(){
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("dust");
Serial.begin(9600);

/*digital output:*/
pinMode(V_LED, OUTPUT);

/*analog input:*/
pinMode(Vo, INPUT);
}

/** references :
* http://blog.naver.com/PostView.nhn?blogId=darknisia&logNo=221222455928
* http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/
* */
// 미세먼지 센서(GP2Y1010AU0F)
// : 적외선 발광 다이오드(IRED)와 포토다이오드가 대각선으로 배치되어 공기 중 먼지의 반사광을 감지
void loop(){
digitalWrite(V_LED,LOW); //ired 'on'
delayMicroseconds(samplingTime);
Vo_value = analogRead(Vo); //read the dust value
delayMicroseconds(deltaTime);// pulse width 0.32 - 0.28 = 0.04 msec
//0.32 msec의 펄스폭을 유지하기 위해 필요한 코드입니다

digitalWrite(V_LED,HIGH); //ired 'off'
delayMicroseconds(sleepTime);


/*
이 센서의 출력전압(Vo)는 먼지가 없을 때의 출력전압(Voc)과 먼지 농도(ΔV)에 비례하여 출력됩니다.
다시 표현하면 ΔV = Vo – Voc
미세먼지 농도[µg/m³] = (Vo – Voc) / 0.005
*/
Voltage = Vo_value * (5.0 / 1024.0);

dustDensity = (Voltage - dustCleanVoltage)/0.005;

Serial.print(" Raw Signal Value (0-1023):");
Serial.print(Vo_value);
Serial.print(" | Volatage:");
Serial.print(Voltage);
Serial.print(" | Dust Density:");
Serial.print(dustDensity);
Serial.print("[ug/m3]");
if(dustDensity<31){
Serial.println(" => [Great(~30)]");
} else if(dustDensity>30 && dustDensity<81){
Serial.println(" => [Good(31~80)]");
} else if(dustDensity>81 && dustDensity<151){
Serial.println(" => [Bad(81~150)]");
} else{
Serial.println(" => [Too Bad(151~)]");
}


// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 0);
lcd.print(dustDensity);
lcd.setCursor(0, 1);
if(dustDensity<31){
lcd.print(": Great(~30)");
} else if(dustDensity>30 && dustDensity<81){
lcd.print(": Good(31~80)");
} else if(dustDensity>81 && dustDensity<151){
lcd.print(": Bad(81~150)");
} else{
lcd.print(": Too Bad(151~)");
}
delay(5000);
}


 

  1. ㅇㅇ 2018.10.31 16:07 신고

    안녕하세요 게시글 잘봤습니다
    혹시 회로도도 보여주실수 있으신가요? 저도 미세먼지 측정기를 제작해보려고 하거든요...
    알려주시면 감사하겠습니다.

    • Just Do It 안.들 2018.10.31 23:25 신고

      저도 사이트 참고해서 그냥 진행하다보니 작성해둔 회로도는 없네요.
      그렇지만 제가 참조한 아래 사이트에는

      GP2Y1010AU0F 관련 회로도가 있으니 참고해주세요.

      http://blog.naver.com/PostView.nhn?blogId=darknisia&logNo=221222455928
      http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/

+ Recent posts