기존 네이트온으로 보내는 PHP코드가 상당히 문제가 있었다. 내 나름대로의 최초 소스 버전으로는 아무런 문제가 없었으나, 한달 30건 발송시 인증이 생겨버려서, 이문제를 해결할 방법은 없어. 단지 30건 되기 직전에 받는 사람으로 하여금 인증을 하라는 추가 문자를 하나 더 날리는 방법으로 어떻게 어떻게 쓸수 있었다.

 그런데 나중엔 네이트온 메신저가 로그인 되지 않은 상태에서는 문자가 발송되지 않고 있었다. 네이트온으로 문자를 보낼때는 먼저 사용자가 네이트온에 로그인 하고 문자창을 띄우게 된다. 이 문자창은 브라우저창이 띄워지고 특정 URL에서 문자가 발송되어 지게 되있다.

 문자발송페이지가 뜰때는 네이트온 로그인 계정이 로그인 된상태로 페이지를 띄워야 했는데, 이때 네이트온은 로그인값과 비밀번호가 아닌 프로그램 로그인시 생성된 티켓값을 가지고 로그인 상태를 처리한다.

 최초 코드를 구현할땐 바로 이티켓값만 넘겨서 페이지만 열면 됐었는데, 나중엔 이것이 막혀버렸었다. 아마 네이트온 로그인 상태를 체크해서, 페이지 단에서 또 체크하는 것이 추가된것 같았다. 그래서 마지막엔 결국 네이트온이 로그인 된 상태에서만 문자가 발송되는 현상이 발생되었다.

 그냥 그런가 보다~ 하고 놔두고 말았는데, 킁님의 도움으로 로그인이 되지 않은 상태에서도 발송될수 있게 수정법을 찾았다. 그런데 그 방법으로는 한가지 문제가 있었다. 문제인 즉은 로그인 상태에서 문자를 보내게 되면, 네이트온 로그인이 튕겨버리는 현상이 발생된다는 것이다. 그래서 네이트온 로그인시에는 튕겨버리지 않게 수정해서 올린다.

 


 그리고 디비고의 경우에도 약간의 코드값을 추가하여 막은것 같다 이것도 킁님의 도움으로 소스를 수정하였다.

 


 위 두 소스의 사용법은 예전과 같음으로 모르겠다면 예전 버전을 참고하면 사용이 가능하며, 소스의 사용으로 생길수 있는 불이익에 대해서는 본인이 책임지지 않겠다.

얼마전에 PHP소스 네이트온 문자 발송소스가 네이트온 로그인이 되지 않은 상태에서는 문자가 발송되지 않게 막혔다. 막히게 되서 발송되게 만들어 놓은 알짜배기 문자들의 활용을 못하게 되었다. 그렇게 그냥 아시워 하고 있었는데.... 쏘원님께서 방명록에서 디비고 무료문자가 한달에 150건을 사용할수 있다는 정보를 주셨다.

어느 다른 분께서도 무료문자는 아니지만 좋은 소스를 알려주시긴 했다. 요새 서비스 회사에서 유행하는 1원 문자... 한달에 990원 결제하고 990건의 문자를 보낼수 있는 그런 서비스를 PHP 코드로 발송될수 있게, 만들어 줄수 있냐는 답변을 받았으나, 해당 소스를 만들기 위해서는 그 서비스를 가입해야 하기 때문에.. 하지 않았다. 디비고 사이트는 무료문자 발송은 지금 알았지만, 이미 가입이 되어 있었고, 무료문자이기에 만들어 보았다.

사용예
dbgoSendSms("userid", "1234", "sendNumber","recvNumber","함수 테스트");

sendNumber 보내는 사람 번호 - 없어야 함.
recvNumber 받는 사람 번호 - 없어야 함.

문자메시지는 디비고 문자가 79바이트까지만 전송이 가능함으로 79바이트 초과된 메시지가 발송시 79바이트 까지만 짤리고 발송된다.

이번에도 Snoopy 클래스를 사용하였다. Snoopy 클래스의 소스는 http://snoopy.sourceforge.net/ 해당 사이트에서 받길 바란다. 내가 올린 php 코드는 Snoopy 클래스를 include 하기 때문에 없다면 동작하지 않는다.

마지막으로 해당 소스코드를 사용하여 발생되는 불이익은 본인이 절대 책임지지 않겠다.

2009년 12월 7일 수정소스
문자전송 소스가 변경되어 소스도 수정하였다. 소스 수정이 가능 하다면 기존소스에서 37번째 줄에 Smssend_v2.php 라고 나온 부분을 Smssend_v3.php 로 변경하면 정상동작한다.



설마 네이트온 관계자분들이 내 블로그를 들어온것은 아닐런지 ㅎㅎ ^^;; 조심스런 걱정을 하면서 어제오늘 부터 네이트온으로 만들어 놓은 자동 알람 문자가 오지 않게 되었다. 그래서 설치 안한 네이트온을 다시 깔고(보통 jateon을 쓴다) 다시 문자발송부분을 까서 함수수정을 들어갔다.

jateon 최신버전에서 문자발송 부분이 문제가 없었기 때문에 큰걱정은 하지 않았으며, 자세히 확인을 해보니 문자를 보내기 위해서 브라우저를 열때 기존 버전은 GET방식으로 티켓값및 ID값을 넘겨 로그인 처리를 하였는데, 그부분이 수정된것같다.  최초 브라우저를 열때 POST 방식으로 티켓값및 ID를 넘겨 로그인 처리를 하게 수정된것이다.

기존 방식에서는 GET방식에서 티켓값만 알았다면 로그인처리가 됐으니 뭐 문제의 발생요지는 충분히 있었겠지만, POST 방식으로 바꿨다고 해서 크게 문제는 되지 않는다. 역시나 로그인 부분을 수정하고 뒷부분은 놔두고 해보니 잘된다. ^^;

그리고 인증하라는 메시지 문자는 71건보낼시 문자가 발송되게 했었는데, 확인을 해보니 70건 문자 발송시 인증을 하고나서 70번째 문자가 발송됨으로 그걸 피할려면 72건때 인증을 해놓으라는 문자를 보내야 했었던 것을 수정하였다.




위의 테스트를 통해 사용했을때는 문제가 없었는데, 실제 함수 호출시에는 문자발송이 안되어서 확인을 해보니 체크가 한번더 걸려있는것인지 네이트온 로그인이 된 상태여야만 문자발송이 되고, 네이트온 로그인이 안되어있다면 문자가 안보내진다. 아마도 발송페이지 로그인할때 네이트온로그인상태까지 체크가 되는것 같다 ㅡ.ㅡ; 이런이런. 우회할 방법을 여러가지로 찾아보았는데.. 방법이 없는것 같다. 그래도 일단 수정된 위의 소스로 네이트온 로그인이 된상태에선 문자가 발송되니 부분적으로라도 그렇게 쓸거라면 사용해도 상관은 없을것 같다.
예전에 만들어 놨던 것인데.. 파란에서도 메일을 간간히 사용한다면 무료문자가 생긴다. 그것도 PHP 코드로 보낼수 있게 만들어봤다.

이번에도 Snoopy 클래스를 사용하였다. Snoopy 클래스의 소스는 http://snoopy.sourceforge.net/ 해당 사이트에서 받길 바란다. 내가 올린 php 코드는 Snoopy 클래스를 include 하기 때문에 없다면 동작하지 않는다.

사용예
sendSmsParan( "test@paran.com", "1234", "보내는 사람 전화번호", "받는사람 전화번호", "sms 메세지")

첫번재 파라미터는 파란 아이디 메일주소까지 포함, 비번, 전화번호 넣는 곳은 -를 없어야 한다. 그리고 sms 메시지는 당연 80바이트 초과되면 뒤에는 짤리니 유의 하시길.

파란 무료문자 사용에만 테스트가 되었음으로, 유로 문자보낼시에는 원활한 동작이 되지 않을수 있고, 해당 소스사용시 발생하는 불이익에 대해서는 본인이 책임을 지지 않겠다 ^^;




그리고 지난번에 올렸던 네이트온으로 무료문자를 보내는 코드를 약간업그레이드를 하였다. 얼마전인가 네이트온으로 무료문자메시지를 보낼때 인증과정을 거쳐 전송을 받는게 추가 됬다.. 그 인증을 풀순 없고 다만 문자 메시지가 71건 남았을때 1건으로 인증을 해야 문자가 간다는 추가메시지를 발송하게 하여 업그레이드를 해보았다.

그리고 기존 소스에서 사용하던 남은 문자수를 읽어오던 페이지가 없어진것 같다. 그래서 그 페이지를 찾아 수정하였고, 전송하는 부분도 수정을 하였다.

http://fromkbs.net

실버라이트를 계속 공부 하였고, 머리속으로 구상은 계속 하고 있었는데 이제서야 완성하게 되었다. 내 머리속에 있는 구현하려고 했던 기능와 샤방한 디자인 등등은 구현하지 못했다 ㅜ.ㅜ.

검색어를 치게 되면 지마켓, 옥션, 11번가 세 온라인 쇼핑몰에서 상품리스트들을 가져와 한페이지에 노출되게 한다. 한쇼핑몰당 9개의 상품이 나타나게 되는데 간략하게 상품 이미지와, 가격, 그리고 링크할수 있는 링크 버튼을 넣었다. 상품을위에 올리게 되면 디테일한 상품 정보가 나온다. 디테일이라고 해봤자 상품명과, 배송비 유무까지만 이지만 ^^;

검색을 하게 되면 각 쇼핑몰의 현재 가장잘 팔리는 인기상품이 나타난다. 그래서 디테일한 상품리스트를 쭈~~~욱 볼수는 없다.. 그래서 검색을 할땐 검색어 단어를 잘 선택해야 한다.

'모니터'란 검색어보단 '2333hd' <- 이렇게 특정 상품 모델명을 검색하던지,
'아이팟'란 검색어보단 '아이팟 터치 16g' <- 이렇게 디테일한 상품 옵션으로 검색하면 그래도 어느정도 내가 원하는 결과는 나올것이다.

User inserted image


내가 사용하고 있는 핸드폰 통신사는 SKT이다. 누구나 알겠지만, SKT사용자는 한달에 한번씩 네이트온 무료문자 100건을 받을 수 있다. 그런데 난 이런 100건의 무료문자를 매달 거의 한건도 사용하지 않았는데, 어느 순간부터 이렇게 날리는 100건의 문자가 괭장히 아깝게 생각이 들었다. 한건당 20원씩 100건이면 그래도 이천원인데.. 한달에 이천원씩 날리는 느낌??

그래서 재미난 생각을 해보았다. 내가 사용하는 블로그에서 PHP를 이용하여 SMS를 보내면 어떨까 하는 생각이 들었다. 그래서 일단 네이트온 로그인 프로토콜을 예전에 잠시 본적이 있었고, 누군가 이미 닷넷 응용프로그램으로 무료 SMS를 네이트온에 로그인 하지 않고 보내는 프로그램을 받은적이 있어, 해당 프로그램을 리플렉터로 까보았다.

일단 소켓통신도 조금 있고, HttpWebRequest 클래스를 이용해 처리를 한것을 보았는데, 일단 PHP 에서는 소켓프로그램을 사용할수 있고, HttpWebRequest 클래스처럼 사용할수 있는 Snoopy 클래스가 있기 때문에 이 두가지를 이용한다면 PHP 에서도 네이트온 무료 문자를 사용할 수 있을것이다.

그래서 프로그래밍을 해보았다. Snoopy 클래스의 소스는 http://snoopy.sourceforge.net/ 해당 사이트에서 받길 바란다. 내가 올린 php 코드는 Snoopy 클래스를 include 하기 때문에 없다면 동작하지 않는다.

함수로 만들었으며 아래에서 처럼 호출해서 쓰면 되겠다. 번호에는 - 를 넣지 말아야 한다.

함수) sendSms("네이트온 로그인 메일 주소", "비밀번호", "보내는 사람 번호","받는 사람 번호","전송할 문자열");

이렇게 소스를 만들어서 뭐에 사용할수 있을까? 활용방법은 이런게 있을수도 있겠다. 특정 URL을 호출하면 구글의 날씨 api를 이용하여 오늘의 날씨를 긁어와서 문자보내는 함수를 이용하여 문자를 보낼수 있게 페이지를 구성하고, 스케쥴러 프로그램을 이용하여 특정시간대 아침마다 호출하게 하면 아침마다 날씨를 문자로 받을수 있겠다. 현재 본인은 그렇게 사용중 ^^;;

해당 소스는 무료 sms 사용을 위해 코딩된것이 때문에 문자쿠폰을 구입후 사용할때에는 동작하지 않을 수 있고, 해당 소스 이용으로 발생한 불이익은 본인이 책임지지 않겠다.

원래는 게시판으로 만들까 하다가 시간이 오래 걸릴것 같아서 메모장 식으로 먼저 만들어 봤다 솔직히 이미 올려진 것과 비교했을때 실버라이트로 페이징 처리 하는것과 바인딩을 처리를 하는것을 추가하고 특별이 더 한것은 없는것 같다.

이미 올려진것과 같은 테이블을 사용하기 때문에 같은 결과물이 나올것이다. 그리고 DB 역시 MySql을 사용하여 Xml로 통신하게 처리하였다.


 

구상을 멋지게 했는데 결과는 이렇게 나왔다 ^^;;; 뭔가 너무 허접하게 나왔다.. 멋진 애니메이션과 화려한 효과를 원했건만.. 그래도 Mysql을 이용한것에 의의를 가져야 겠다.

DB를 이용해서 간단한 메모를 기록할수 있는 프로그램을 만들어 봤다. 일단 DB는 Mysql 을 이용하였다. 공식적으로 실버라이트는 Mysql을 이용하기 위해 어떤한 것도 제공은 해주지 않는다.(아닌가? 내가 못찾은건가?) 그래서 어떻게 하면 Mysql을 이용할수 있을까 하는 생각에서 MSsql 의 쿼리문 중에 for xml auto, elements 라는 쿼리문이 떠올랐다. MSsql에서 쿼리문 제일 마지막에 위의 명령어 문구를 사용하게 되면 테이블의 구조와 필트명에 따라 결과가 xml로 나오게 된다.. Mysql에서도 해당 쿼리문을 사용할수 있다면 어느정도 이용은 가능할수 있을것 같았다. 근데 웬걸 Mysql에서는 저런 쿼리문은 사용되지 않았다.

어째던 그런 명령문은 사용되지 않았기 때문에 php로 db를 읽을때 테이블명, 필드명을 추출해서 XML 출력을 해줄수 있게 만들었다. 결국 php페이지를 읽을때 Sql문을 파라미터 값에다 넘기고 그 결과값을 xml로 받을수 있게 만들었다. 실버라이트에서는 xml을 읽는 것은 쉽기때문에..

이렇게 db를 읽게 하여 Mysql을 이용가능 하게 하였다. DB읽기가 어느정도 되었기때문에 간단한 메모기록 프로그램을 만들어 보았다. 프로그램명은 SilverBoard!!



로딩 될때 가장 최근쓴글 6개가 읽여진다. 어째던 Mysql을 이용하여 만들었다는 것에 의의를 두고 다음번엔 실버라이틀 게시판을 만들어봐야겠다. 물론 Mysql을 이용해서 좀더 에니메이션이 들어간 작품으로.... 썩 만족스럽진 않다.

실버라이트를 이용하여 rss읽는것 자체는 굉장히 쉬운일이다. 그렇지만 다른 호스트의 rss을 읽는것은 쉽게 할수 없는 일이다. 이유인 즉은 실버라이트에서 크로스도메인 접속시 해당 도메인에 대한 권한파일을 확인후 권한이 없다거나 권한파일 자체가 없다면 접근을 할수가 없다. 우리 회사도 요즘들어 굉장히 많은 인젝션 공격이 들어오는 걸로 봐선 어떻게 보면 당연하다고 볼수는 있지만..... rss뿐만 아니라 이미지라던가 웹페이지 등등등 그 어떠한 자료도 권한이 없다면 순수 실버라이트만 가지고 사용할수 없게 된다.

그렇다면 뭐야?? 내가 원하는 것은 다른 도메인의 rss일뿐 내가 내블로그 rss를 받아봤자 뭐하겠냐구 ^^;; 그리고 난 a 라는 사이트의 이미지 잠깐 쓰고만 싶을 뿐인데 그사이트에서 얼씨구나 좋와요 하고 권한 파일을 만들어 줄리는 없을거잖아 ^^;; 그렇담 이렇게 이용할수 있지 않을까? 닷넷이라면 내 도메인에서 HttpWebRequest 객체를 이용해 내가 읽고 싶은 URL을 읽은 다음에 다시 뿌려준다면 도메인이 다른 사이트라도 내 도메인에서 뿌려주는것처럼 실버라이트런타임을 속일수 있게 되고 그럼 이용이 가능할 것이다.

그래서 난 당장 내 블로그에서 이용 가능하게 해보려고 시도 했다. 그런데 또하나의 문제점이 있었다. 내 블로그는 PHP 서비스로 이용되는 블로그이다. 그렇기 때문에 난 PHP용 HttpWebRequest 객체와 같은 것을 이용해 사용해야 한다 ^^; 그래서 찾아낸 것이 PHP용 WebAgent인 snoopy 라는 것을 찾았다. snoopy 클래스를 이용하면 손쉽게 내가 원하는 페이지를 읽어 올수 있다.  snoopy 의 소스는

http://snoopy.sourceforge.net/

여기서 다운 받을수 있다.

여기서 snoopy 클래스를 이용시 팁이라고 한다면 snoopy 클래스에서 agent 속성을 설정하는 부분이 있는데
Snoopy v1.2.4 이라고 설정이 되있다. 그런데 이렇게 agent속성이 설정되 있게되면 이용에 제한이 돼있는 사이트가 있다. 아마도 사이트 긁는 검색엔진이라던지 봇을 막기위해 차단이 되는데 agent 속성을 IE의 agent 값과 같게 한다면 접근이 불가능한 사이트라도 가능해 진다. 물론 100% 차단 해제된다는 장담은 못함!

이렇게 snoopy 클래스를 이용하여 크로스 도메인 문제를 해결하는 URL을 만들었다.
이렇게 http://mydomain/get.php?target=http://targetdomain/rss 페이지를 요청하면 http://targetdomain/rss 의rss를 마치 내 도메인에서 뿌려주는 것처럼.

소스보기

어설프지만 위와 같이 실버라이트 만들어 보았다. ^^; ㅎㅎ 해보니 왠만한 rss는 잘긁어 오는것 같다. 아래는 구현한 예제이다.



이상 rss 읽어오기 끗~~~~~~~

vb 또는 asp에서 다른 웹페이지를 호출하고 싶어질때가 있다.
물론 C#과 같은 언어는 httpRequest 와 같은 객체가 있어 손쉽게 받을수 있지만
vb or asp에서는 WinHttp.WinHttpRequest.5.1 의 객체를 생성하여 사용할수 있다.

GET 방식으로 페이지를 호출할경우

Function getSiteSourceGet( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "GET", siteURL & "?" & params, False
 
 httpObj.Send()
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourceGet = httpObj.ResponseText
 Else
  getSiteSourceGet = null
 End If
End Function



 

POST 방식으로 페이지를 호출할 경우

Function getSiteSourcePost( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "POST" , siteURL, False
 httpObj.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
 '포스트 방식시 위의 라인을 추가해 주어야 한다.
 
 httpObj.Send params
 '포스트의 파라미터는 Send 호출시 같이 값을 넘겨 주어야 한다.
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourcePost = httpObj.ResponseText
 Else
  getSiteSourcePost = null
 End If
End Function



POST를 이용할시 약간 수정행 주어야 할것이 있는데 Content-Type을 위와 같이 변경해주어야 하며 파라미터를 GET방식과는 다르게 Send 시 값을 넘겨주어야 파라미터값들이 전달되다.

위와 같이 함수를 만들어 사용하면 될것이다.

추가된글 파라미터를 넘길때 GET 방식이던 POST 방식이던 URLEncode 를 해주어야 한다. 그것때문에 한참 헤맸다. 그리고 VB Script로 호출시에는 Server 객체를 사용할수 없음으로 URLEncode 함수를 직접 만들어 사용해야 했다. URLEncode 함수는 쉽게 구할수 있다.


div>