Develop
2017.02.27 11:23

[ios] Facebook Cache 갱신하는 함수

Views 1178 Votes 0 Comment 0
Atachment
Attachment '1'
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

페이스북에 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
No. Category Subject Author Date Views
1109 Develop [js] 스크롤을 포함한 마우스 위치 찾는 코드 hooni 2003.04.23 8505
1108 Develop [c] pcap을 이용한 패킷 분석 ㅎㅎ hooni 2003.04.23 10210
1107 Develop [linux] 쉘 스크립트를 이용한 BBS hooni 2003.04.23 10047
1106 Develop [unix] 쉘 스크립트 예제 모음 hooni 2003.04.23 14949
1105 System/OS [linux] vi 편집기 간단한 명령과 환경설정 hooni 2003.04.23 11359
1104 System/OS [linux] 리눅스 활용 팁^^ hooni 2003.04.23 14629
1103 System/OS [linux] 기본 명령어 (내공쌓기) hooni 2003.04.23 14333
1102 System/OS [linux] 간단한 vi편집기 사용 명령 hooni 2003.04.23 13456
1101 System/OS [linux] 프로그램 설치방법 (내공쌓기) hooni 2003.04.23 13433
1100 System/OS [linux] 계정관리하기(내공쌓기) hooni 2003.04.23 13157
1099 System/OS [linux] 기본적인 설정하기(내공쌓기) hooni 2003.04.23 13993
1098 System/OS [linux] 새 하드디스크 추가하기..(내공쌓기) hooni 2003.04.23 13807
1097 System/OS [linux] 아파치설치/설정 hooni 2003.04.23 14492
1096 System/OS [linux] 아파치설치/설정(CGI부분) hooni 2003.04.23 14568
1095 System/OS [linux] 아파치설치/설정 - SSI(Server Side Include) hooni 2003.04.23 13206
1094 System/OS [linux] 아파치 설치/설정(proxy) hooni 2003.04.23 12965
Board Pagination Prev 1 3 4 5 6 7 ... 74 Next
/ 74