SNS에는 API를 이용한 연동만 있는줄 알았는데 단순히 URL을 통해서 파라미터로 내용은 전달해서 각 SNS의 글쓰는 란을 채워줄 수 있는 기능을 제공하고 있었습니다.(웹사이트에 있는 SNS버튼들은 잘 이용하지 않는 관계로 이런 기능도 제공하고 있는지는 몰랐었네요.) 제가 사용해 본것은 Facebook과 Twitter, me2day입니다.
동작은 모두 동일합니다. 각 SNS에서 제공하는 URL에 파라미터로 내용이나 링크를 전달하면 해당 유저가 로그인하지 않았으면 자동으로 로그인창이 나타나고 로그인후에 각 SNS페이지의 글을 작성하는 Textarea영역에 전달한 내용이 자동으로 입력되어 사용자는 전송버튼만 클릭하면 글을 작성할 수 있게 하는 구조입니다.
http://twitter.com/home?status=전달할컨텐츠
status에 필요한 텍스트를 전달만 하면 됩니다. 그냥 적어도 되기는 하지만 URL이므로 URL인코딩정도는 해서 넘겨주면 더 좋을듯 합니다. 당연히 140자 이내로 적어주는게 좋겠습니다.
me2day
http://me2day.net/posts/new?new_post[body]=전달할컨텐츠
약간은 특이한 모양의 파라미터명을 가지고 있습니다. 링크같은 경우는 미투데이의 링크포맷인 "링크명":URL 같은 형식의 스트링을 만들어서 전달해주면 됩니다. 여기도 마찬가지로 URL을 인코딩해주는것이 좋겠습니다.
http://www.facebook.com/sharer.php?u=<공유할 url>&t=<컨텐트 타이틀>
트위터나 미투데이와는 다르게 페이스북은 마이크로블로그 사이트가 아니기 때문에 좀더 복잡합니다. 위의 URL은 글을 작성할때 링크를 추가하는 기능입니다. u 파라미터에 공유할 링크를 주고 그에대한 타이틀을 t로 전달합니다. 테스트 결과 사실 이 t는 크게 의미가 없고 페이스북이 URL로 호출을 날려서 페이지의 타이틀을 가져와서 자동으로 보여줍니다. 마치 이게 실패하면 t로 넘긴 값을 보여줄것 같지만 실패하면 아무것도 보여주지 않습니다. t는 그냥 URL에서 타이틀을 가져오기 전까지 잠시 보여줬다가 타이틀정보로 교체됩니다.
일반적으로 URL은 당연히 URI인코딩을 해서 넘기는 것이지만 페이스북의 경우에는 약간 달랐습니다. 정확한 페이스북이 URL의 정보를 파악해내는 패턴까지는 분석하지 못했지만 URL의 문제인지 페이지 마크업의 문제인지 해당 URL의 제목과 썸네일을 가져와야 하는데 이것이 실패하는 경우가 종종있습니다. 이럴 때는 URL인코딩을 취소한다던지 하는 식의 시도를 해보면 됩니다. 저같은 경우는 마지막에 슬래쉬(/)가 있느냐 없냐에 따라서 제목의 인코딩이 깨지냐 안깨지냐의 차이가 나기도 했습니다.
좋은 정보 감사합니다.
연동이 필요없는 부분에는 개발하기 편리하게 제공해주네요...
예 개발적으로 어려운 부분은 아닌데 존재여부도 몰랐던거라서요. ㅎㅎ
공유버튼등에는 쓸만할듯 싶어요.
좋은정보 알아갑니다. 근데 페이스북은 포스트 메시지 쓰는 방법은 없을까요? url 자체가 콘텐츠 공유인듯하네요. url과 해당 url정보만 올라가네요.
글쓰는건 따로 없는것 같더라구요..
좀 찾아보니 해당 URL페이지에 <meta name="description" content="">를 작성하면 content의 내용을 글로 가져가는것 같기는 하지만 테스트는 못해봤습니다.
흐흠. 싸이월드는 sns 연동이 안되려나요?; 저는 싸이월드는 쓰지 않지만. 아이들(?)이 워낙 좋아하는지라 제가 만든 홈피를 활성화 시킬려면 다 긁어와야 좀 되겠는데 말이지요;;;
국내에서는 많이 쓰긴 하지만 싸이월드는 제 관심사가 아니라서요... ㅎㅎㅎ
용도 자체가 외부링크를 퍼서 올리는 패턴은 그리 보지 못한 관계로 없지 않을까 싶습니다. ㅎ
http://twitter.com/home?status=전달할컨텐츠
라고해서 전달하면, 글자가 깨져서 전송이 되더라구요~
말씀하신데로 url인코딩을 해야 하는건가본데,
어떤식으로 해야 하는걸까요?
페이지나 데이터가 UTF-8이 아니신것 같은데요 어떤 언어를 사용하시는지 모르겠지만 대부분의 언어에는 URL로 인코딩해주는 메서드들이 있습니다.
자바스크립트같은 경우는 다음과 같이 사용해서 인코딩한 결과를 전달하시면 됩니다.
encodeURIComponent("전달할컨텐츠")
좋은 정보 감사드립니다.
좋은 하루 되세요~^^
예~ 좋은 하루 되세요~ ㅎ
좋은 포스팅 감사합니다. 그런데 페이스 북 연동에서 url 의 타이틀을 가져간다고 하셨는데, 그 의미가 <head> 안에 있는 <title> 을 가져간다는 의미인지 궁금합니다. title 과 content 를 가져가고 싶은데 자꾸 타이틀에는 localhost를 가져가서요 ㅎㅎㅎ 좋은 하루 되십시오~
정확히 말씀드리면 지금은 페이스북이 오픈그래프( https://developers.facebook.com/docs/opengraph )를 사용합니다. 페이스북내에서 링크를 삽입하면 페이스북의 크롤러가 해당 URL을 긁어서 완성하는 방식이죠. 사이트에 오픈그래프를 추가해서 정보를 넣으면 이 정보대로 가져가고 제가 알기로 오픈그래프가 없으면 페이지싀 <title>을 가져가는 것으로 알고 있습니다. 원하는대로 긁어가게 하려면 오픈그래프를 사용하시는게 가장 좋습니다.
페이스북이 어떻게 긁어가는지 보고 싶으면 아래 링크에서 테스트해볼 수 있습니다.
https://developers.facebook.com/tools/debug/
네. 그렇군요. 제 문제는 외부에서 접속할 수 없는 망에서 오픈그래프 태그를 사용하여 제대로 콘텐츠가 출력이 되지 않았던 것이었습니다.ㅎㅎㅎ 좋은 하루 되십시오, 답변 감사드려요.
방화벽 문제였군요. 잘 해결되셨다니 다행입니다. ㅎ