Contents

Develop
2017.02.27 11:23

[ios] Facebook Cache 갱신하는 함수

조회 수 1300 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

페이스북에 URL을 공유할 경우 페이스북은 해당 URL에 대한 OpenGraph 정보들을 캐싱한다.

메타 정보가 수시로 바뀌는 컨텐츠의 경우 Facebook의 URL 공유시 잘못된 정보가 매핑될 수 있다.

(이전에 캐싱됐던 내용이 적용되는 것)


이를 갱신하기 위한 방법이 여러 가지가 있다.


1. Facebook for Developers (개발자도구) 사이트를 이용하여 요청

Facebook의 개발자 사이트에서 OG 캐시의 동작을 확인하고 갱신하는 웹페이지를 제공한다.

다음 URL을 이용해 확인할 수 있다.

-> https://developers.facebook.com/tools/debug/


2. Facebook API 이용

Facebook에서 OG 캐시를 갱신할 수 있는 HTTP 기반의 API를 제공하고 있다.

다양한 플랫폼과 프로그래밍 언어를 통해 이 API를 호출하여 갱신할 수 있다.


PHP + Curl (Web, Server-side)

$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://www.picomax.net/',
    'scrape' => true
);
$data = http_build_query($params);

curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_exec( $ch );
$httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE );

Javascript (Web, Front-end)

// with jQuery
$.post(
    'https://graph.facebook.com',
    {
        id: 'http://www.picomax.net/',
        scrape: true
    },
    function(response){
        console.log(response);
    }
);


# Vanilla Javascript (Web, Front-end)

//Check if facebook_refresh query string is present
if(window.location.search.indexOf("facebook_refresh") >= 0)
{
    //Feature check browsers for support
    if(document.addEventListener && window.XMLHttpRequest && document.querySelector)
    {
        //DOM is ready
        document.addEventListener("DOMContentLoaded", function() {
            var httpRequest = new XMLHttpRequest();
            httpRequest.open("POST", "https://graph.facebook.com", true);
            
            httpRequest.onreadystatechange = function () {
                if (httpRequest.readyState == 4) {
                    console.log("httpRequest.responseText", httpRequest.responseText);
                }
            };
            
            //Default URL to send to Facebook
            var url = window.location;
            
            //og:url element
            var og_url = document.querySelector("meta[property='og:url']");
            
            //Check if og:url element is present on page
            if(og_url != null)
            {
                //Get the content attribute value of og:url
                var og_url_value = og_url.getAttribute("content");
                
                //If og:url content attribute isn't empty
                if(og_url_value != "")
                {
                    url = og_url_value;
                } else {
                    console.warn('<meta property="og:url" content=""> is empty.
                    Falling back to window.location');
                }               
            } else {
                console.warn('<meta property="og:url" content=""> is missing.
                Falling back to window.location');
            }
            
            //Send AJAX
            httpRequest.send("scrape=true&id=" + encodeURIComponent(url));
            
        });
    } else {
        console.warn("Your browser doesn't support one of the following:
            document.addEventListener && window.XMLHttpRequest && document.querySelector");
    }
}


# Objective-C (iOS)

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    NSString *targetId = @"http://www.picomax.net";
    //[self updateFacebookCache:targetId];
}

- (void)updateFacebookCache:(NSString *)targetId {
    NSString *url = @"https://graph.facebook.com";
    
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
    [params setObject:targetId forKey:@"id"];
    [params setObject:@"true" forKey:@"scrape"];
    
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]
        initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    
    [manager POST:url parameters:params progress:nil
        success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)
    {
        NSLog(@"success!");
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error: %@", error);
    }];
}



?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1065 Develop [ubuntu] 우분투 18.04에 PHP5 설치하기 hooni 2020.11.14 1079
1064 Etc EBS [수학영역] 미적분과 통계 기본 - 정규분포의 의미와 특징은? hooni 2015.04.20 1087
1063 System/OS [펌] 마이크로서비스, 모노리포, SRE, ... 덮어놓고 구글 따라하면 안 되는 기술들 file hooni 2020.10.15 1091
1062 Develop [ios] Xcode의 디버그 모드에서 콜스택 file hooni 2015.01.03 1098
1061 System/OS 콘솔에서 패스워드 걸린 zip 압축하는 명령 hooni 2018.03.02 1099
1060 System/OS [mac] 패키지 매니저, MacPort hooni 2015.01.03 1111
1059 Develop [c] FSN 온라인 코딩 테스트 (Sorting, Binary Search) file hooni 2015.06.26 1123
1058 Develop '2014 모바일 개발 트렌드' 발표자료입니다. file hooni 2014.10.02 1127
1057 Develop [ios] 로컬에 있는 html 실행하기 hooni 2015.02.10 1131
1056 System/OS [svn] Can't convert string from native encoding to 'UTF-8' 메시지가 나오는 경우 hooni 2014.12.18 1143
1055 Develop [ios] StoryBoard(xib) 없이 프로젝트 만들기 file hooni 2015.02.12 1146
1054 PPT [ppt] iOS 플라랩#03(2015.04.27) 발표 자료 file hooni 2015.04.24 1150
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 98 Next
/ 98