2015년 8월 24일 월요일

페이스북 캐시 삭제 방법(PHP API)

페이스북의 경우 최초 공유시(공유버튼, 타임라인에 URL입력등) 대상 웹사이트에 방문하여 결과값을 서버에 저장해 두고 일정기간 보관하며 이용하게 된다.

그러므로 웹사이트의 콘텐츠 내용(이미지,내용,제목)을 변경해도 페이스북의 캐시가 업데이트 되지 않는한 이미 저장되어 있던 내용을 보여준다.

일반적으로는 Open Graph Debugger 페이지에서 공개된 URL을 입력한 후 Fetch new scrape information 버튼을 클릭해서 캐시를 갱신 할 수있다. (페이스북 로그인)


이 경우 페이지가 수정될때 마다 위 페이지에 접근해서 갱신 시켜줘야 하는 단점있다.

두번째 방법으로는 페이스북 API를 사용해서 즉시 캐쉬를 갱신 할 수 있다.
https://developers.facebook.com/docs/sharing/opengraph/using-objects

간단하게 POST 방식으로 
https://graph.facebook.com 로 id와 scrape 값만 보내주면 된다.

예) PHP 의 curl 사용 예제
$url = 'https://graph.facebook.com';
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POST, true );
$params = array(
'id' => 'http://domain.com/page-url/',
'scrape' => true
);
$data = http_build_query($params);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_exec( $ch );
$httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE );

조금만 응용하면 자바스크립트로도 가능하다.(이건 안해봄)

2015년 8월 21일 금요일

본문에 포함된 scrtip 태그 제거하기(정규식)

본문 내용안에 포함된 자바스크립트 삭제 정규식

preg_replace("/<script(.*?)>(.*?)<\/script>/is","",$input);

입맛에 따라 style 태그 제거등으로 활용 가능

2015년 5월 6일 수요일

twitteroauth 0.5.3 설치 및 사용 방법(twitter api)

트위터 php libray인 twitteroauth를 선택하고 사용하려 하지만 간략한 설명과 검색해도 국내 문서가 잘 나오지 않아 간략하게 한번 정리 하고자 한다.

사용전 https://apps.twitter.com/ 이곳에서 application 생성 후 CONSUMER_KEY와 CONSUMER_SECRET 값을 사용할 수 있다..



다운로드 : https://github.com/abraham/twitteroauth/releases

버전 : PHP 5.4 이상
설치방법 :  https://twitteroauth.com/
※ 압축해제 후 전체 업로드 후 간단하게 아래와 같이 코딩하면 바로 사용가능..

<?php
require "twitteroauth/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret); $content = $connection->get("account/verify_credentials");
?>


$access_token 과 $access_token_secret 를 생략하면 app auth으로 허용된다.
※콜제한 :  https://dev.twitter.com/rest/public/rate-limits

추가
//x_rate_limit_remaining(15분동안 요청가능한 횟수)등 헤더값을 배열로 리턴
print_r($connection->getLastXHeaders());

//HTTP코드를 리턴해준다(정상:200)
print_r($connection->getLastHttpCode());

twitter API v1.1 개발 참고 사이트

처음 트위터 API를 사용해서 개발시 참고 사이트

Exploring the twitter API
https://dev.twitter.com/rest/tools/console

Application Management
https://apps.twitter.com/

Rate Limits: Chart(콜제한)
https://dev.twitter.com/rest/public/rate-limits

twitter PHP libray (OAuth REST API)
- https://dev.twitter.com/oauth/overview/single-user
- https://github.com/abraham/twitteroauth
- https://twitteroauth.com/

Application-only authentication
https://dev.twitter.com/oauth/application-only


2015년 4월 30일 목요일

curl 도메인 사용시 속도 문제

curl 이나 socket 을 사용시, IP로 접근하는 경우 문제가 없으나 도메인으로 접근시 속도가 느려지는 현상이 있었다. 결론적으로 IPV6 disable 하면 해결 가능하다.

curl 사용시 curl_getinfo 함수로 네트워크 지체된 부분을 확인 한다.
namelookup_time 시간이 IP로 접근했을때와 다르게 과도하게 발생된다면 의심해 볼만하다.

이 문제 때문에 호스트네임을 gethostbyname 으로 IP로 변경한 후 사용했다.
메뉴얼에 다음과 같은 설명이 있었음을 이제야 확인한다.(Returns the IPv4 address of the Internet host specified by hostname. )

참고가 될만한 링크..


curl force IPv4 - disable IPv6 in curl and PHP

Linux ETC - ipv6 비활성화 하기

2015년 4월 6일 월요일

PHP 에서 GMT 시간 출력

웹사이트 운영 및 관리시 시간 노출부분에 GMT 시간을 요구하는 경우가 많다. GMT가 뭘까?
GMT = Greenwich Mean Time = 그리니치 평균시 = 협정 세계시 = UTC

보통 출력시 아래와 같은 포맷으로 사용 된다.
Mon, 06 Apr 2015 06:05:16 GMT


PHP코드로는 아래와 같이 사용 한다.
<?php
echo gmdate('D, d M Y H:i:s \G\M\T', time());
?>


gmdatedate의 차이점은 date의경우 php.ini 에서 설정된 타임존을 기준으로 현재 시간을 노출하고... dmdate의 경우 GMT 표준시간을 기준으로 노출한다.

웹사이트 임시점검, 공사중 페이지 검색엔진에 알리기

웹사이트를 운영하다보면 장비교체, 서비스 점검등으로 길게는 몇시간 짧게는 몇분정도 서비스를 셧다운 시킬때가 있다.

보통은 그냥 셧다운 시키던가 공사중 페이지를 만들고 DNS, 아파치, 자바스크립트등 으로 페이지를 리디렉션 시키는 방법으로 사용자에게 알리곤 한다.

네이버 임시점검중 페이지

임시점검 페이지를 만들어 정상화 시점을 알리고 폐쇄된 것이 아니라 점검중 임을 알리는 것은 잘된 선택이다. 그렇다면 검색엔진의 로봇(크롤러)는 어떻게 판단하고 색인을 갱신 할 것인가도 생각해 보아야 한다.

여러가지 가능성을 생각해보자.
1. 점검페이지 없이 셧다운(404)
    페이지가 삭제 되었다고 인지(색인된 주소 삭제?)
2. 301 리디렉션
    페이지 주소가 영구적으로 변경 되었다고 인지(색인된 주소 갱신?)

이런 문제점을 해결하기 위한 방법들이다.
How to deal with planned site downtime
SEO Friendly Downtimes
How To Handle Downtime During Site Maintenance

내용인 즉
임시점검 페이지로 302 리디렉션 후 header에 503에러 후 서비스 정상화 시점을 적는 방법에 대한 설명이다. 검색엔진과 사용자 모두에게 동일한 결과를 노출 시키기 위한 방법이다.

<?php
header("HTTP/1.1 503 Service Temporarily Unavailable");
header("Status: 503 Service Temporarily Unavailable"); 
header("Retry-After: 3600");
//OR
hdader("Retry-After: Sun, 5 Jan 2012 13:00:00 GMT"); 
?>


물론 서비스 점검을 목적으로 사이트를 다운 시켰다고 구글등의 검색엔진에서 404에러만 믿고 바로 모든 색인을 삭제 하지는 않는다. 또한 503에러가 난다고 몇 주일씩 서비스가 정상화 될때까지 검색엔진이 색인을 보유하고 기다려 주지도 않는다고 한다.

검색엔진에 최적화 하기 위한 방법으로 사용하되 기간에 따라 맹신할 필요는 없다.