문제가 된다면 삭제하겠습니다-_-

전에 WireShark를 이용해서 알송패킷을 캡쳐했을 때 보면 특정주소의 WebService를 요청해서 가져오게 되어있었습니다. http://mudchobo.tomeii.com/tt/434

실제 전송하는 데이터는 MD5값인데, 이게 어떻게 생성되는지 몰라서 구글에서 검색을 하니 어떤 블로그에서 시도한 흔적을 발견했습니다. 거기에 있는 댓글에서 발견했습니다^^
http://dialup.egloos.com/152001

"MP3 파일의 경우 strChecksum 값은 ID3태그등을 제외한 순수 MP3 음악 데이터를 앞에서부터 163840 바이트 읽어서 MD5로 돌린 값입니다. " 라고 친절하게 답변이....-_-

그래서 이렇게 하니까 잘 되더라구요. 아래는 샘플 코드입니다.
필요한 라이브러리는 MD5생성해주는 corelib가 필요합니다.
http://code.google.com/p/as3corelib/
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
applicationComplete="applicationCompleteHandler()">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import flash.text.engine.ContentElement;
import mx.messaging.messages.HTTPRequestMessage;
import mx.rpc.http.HTTPService;
import com.adobe.crypto.MD5;
private function applicationCompleteHandler():void
{
var fs:FileStream = new FileStream();
fs.open(new File("C:/Users/mudchobo/Downloads/임재범 - 사랑이라서.mp3"), FileMode.READ);
var fileSize:int = fs.bytesAvailable;

for (var i:int = 0; i < 500000; i++)
{
if (fs.bytesAvailable >= 3 && fs.readUTFBytes(3) == "ID3")
{
var sizeByte:ByteArray = new ByteArray();

// ID3v2길이구하기
fs.position += 3;
fs.readBytes(sizeByte, 0, 4);
var id3Size:int = sizeByte[0] << 21 | sizeByte[1] << 14 | sizeByte[2] << 7 | sizeByte[3];
fs.position = id3Size + 10;
break;
}
}

// ID3태그 없는 경우
if (i == 500000)
{
fs.position = 0;
}

// 공백있는 ID3태그에 대한 처리
for (i = 0; i < 50000; i++)
{
if (fs.readUnsignedByte() == 255)
{
var a:int = fs.readUnsignedByte();
if ((a >> 5) == 7)
{
fs.position += -2;
break;
}
}
}

// 163840만큼 읽어서 md5생성
var data:ByteArray = new ByteArray();
fs.readBytes(data, 0, 163840);
var md5:String = MD5.hashBytes(data);

// 웹서비스 요청
var httpService:HTTPService = new HTTPService();
httpService.method = HTTPRequestMessage.POST_METHOD;
httpService.contentType = "application/soap+xml";
httpService.url = "http://lyrics.alsong.co.kr/alsongwebservice/service1.asmx";
httpService.request = new XML('<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="ALSongWebServer/Service1Soap" xmlns:ns1="ALSongWebServer" xmlns:ns3="ALSongWebServer/Service1Soap12"><SOAP-ENV:Body><ns1:GetLyric5><ns1:stQuery><ns1:strChecksum>' + md5 + '</ns1:strChecksum><ns1:strVersion>2.0 beta2</ns1:strVersion><ns1:strMACAddress>ffffffffffff</ns1:strMACAddress><ns1:strIPAddress>255.255.255.0</ns1:strIPAddress></ns1:stQuery></ns1:GetLyric5></SOAP-ENV:Body></SOAP-ENV:Envelope>');
httpService.addEventListener(ResultEvent.RESULT, resultHandler);
httpService.addEventListener(FaultEvent.FAULT, faultHandler);
httpService.send();
}

private function resultHandler(event:ResultEvent):void
{
trace("싱크가사 = " + event.result.Envelope.Body.GetLyric5Response.GetLyric5Result.strLyric);
}

private function faultHandler(event:FaultEvent):void
{
trace(event.toString());
}

]]>
</mx:Script>
</mx:WindowedApplication>

여기서 알송가사에서 제공하는 웹서비스는 WebService인데, HTTPService로 요청한 이유는 wsdl문서가 어디있는지 못찾겠음 ㄷㄷ 그래서 그냥 httpservice로 xml통채로 넘겨버리니-_- 되더라구요 ^^
xml넘길 때 strCheckSum값만 md5구한걸로 넘기면 돼요^^

싱크가사 = [00:00.00]하루 하루 그대만 보여서<br>[00:23.28]매일매일 눈을 가리고 살아<br>[00:31.34]그대 곁을 나조차도 모르게 머물며<br>[00:38.91]메마른 내 가슴이 그댈 잊어버리지 못한 이유는<br>[00:00.00]<br>[00:00.00]<br>[00:49.93]사랑이라서 사랑이라서<br>[00:56.06]두번다시 못볼 사랑이라서<br>[00:00.00]<br>[01:03.32]하늘이 하는 일 돌릴 수 없는 일<br>[01:11.39]이렇게 사는게 힘들면 그녈 보내줄텐데<br>[01:19.51]죽어서 보라고 그래서 보라고<br>[01:26.42]그때라도 사랑한 마음이 남아있게된다면<br>[01:34.53]그때쯤에<br>[00:00.00]<br>[01:42.93]어딜가도 그대만 보여서<br>[01:49.88]매일매일 나를 지우고 살아<br>[01:57.28]한순간도 바람처럼 떠날줄 모르고<br>[02:04.71]죽어도 내가슴이 그댈 떠나보내지 못한 이유는<br>[00:00.00]<br>[02:15.49]사랑이라서 사랑이라서<br>[02:23.68]가슴가득 맺힌 사랑이라서<br>[00:00.00]<br>[02:29.68]하늘이 하는 일 돌릴 수 없는 일<br>[02:37.81]이렇게 사는게 힘들면 그녈 보내줄텐데<br>[02:45.79]죽어서 보라고 그래서 보라고<br>[02:52.51]그때라도 사랑한 마음이 남아있게 된다면<br>[03:00.90]그때쯤에<br>[00:00.00]<br>[03:04.66]간절히 바랬어 너에게 가는일<br>[00:00.00]<br>[03:33.19]하늘이 하는 일 돌릴 수 없는 일<br>[03:41.80]이렇게 사는게 힘들면 그녈 보내줄텐데<br>[03:49.23]죽어서 보라고 그래서 보라고<br>[03:56.56]그때라도 사랑한 마음이 남아있게된다면<br>[04:04.29]그때쯤에<br>


PS. HTTPService에서 xml전송해서 하는 거 어떻게 하는지 몰랐는데, 그냥 httpservice에 있는 request객체에 xml을 생성해서 넣어주면 된다는....-_-

머드초보 이 작성.

당신의 의견을 작성해 주세요.

  1. Comment RSS : http://mudchobo.tomeii.com/tt/rss/comment/443
  2. 쿠나 2010/01/17 16:27  편집/삭제  댓글 작성  댓글 주소

    우와~ 감사합니다 :)
    POST 헤더를 어떻게 만들어서 보내야하는지 전전긍긍했는데 도움 많이 되었어요~

    • 머드초보 2010/01/19 11:57  편집/삭제  댓글 주소

      아....도움이 되셨다니 다행이네요^^
      근데 이글은 알송가사서버에 비정상접속에 대한 글에서....얻으셨다니!-_-

[로그인][오픈아이디란?]
htmlText에서 <a>태그를 사용할 수 있는데요. 이것에 마우스오버 시 다른 css로 바꾸는 a:link, a:hover, a:active 스타일을 적용할 수 있습니다.
근데, 그냥 css에 때려박으니까 안되더라구요. 검색하니까 바로 나오네요^^

우선 StyleLabel.as

package
{
import flash.text.StyleSheet;

import mx.controls.Label;

public class StyleLabel extends Label
{
public function StyleLabel()
{
super();
}

override protected function createChildren():void
{
super.createChildren();

var styleSheet:StyleSheet = new StyleSheet();
styleSheet.setStyle("a:link", {color:"#004F99", textDecoration:"none"});
styleSheet.setStyle("a:hover", {color:"#004F99", textDecoration:"underline"});
styleSheet.setStyle("a:active", {textDecoration:"none"});
textField.styleSheet = styleSheet;
}
}
}

textField에 styleSheet라는 것이 있는데, StyleSheet를 생성해서 a:link, a:hover, a:active를 스타일설정해서 textField에 있는 styleSheet에 넣어주면 끝!

<local:StyleLabel id="styleLabel">
<local:htmlText>
<![CDATA[<a href="http://www.naver.com">네이년</a>]]>
</local:htmlText>
</local:StyleLabel>

htmlText를 사용하는 컴포넌트 Label이나 Text, TextArea에서 됩니다.
머드초보 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
Windows API정복 이후 간만에 1000페이지가 넘는 책을 구입했습니다. 지금 확인해보니 Windows API정복은 1500페이지 짜리군요. 사실 이런 책 하나쯤은 회사책상 위에 올려놔줘야 간지가 나죠......아 농담이구요-_-

ActionScript에 대해서 너무 모르고 flash계열에 입문을 해버려서-_- 저한테 좋은 책이 나왔네요. AIR IN ACTION의 역자이신 유윤선님과 ActionScript 3.0 CookBook역자이신 송호철님께서 번역을 해주셨네요^^ 둘 다 매우 유용하게 쓰고 좋아하는 책들인데^^ 두분이서 1000페이지를.....-_- 대....대단하십니다-_-

물론 2년전 책이 국내에는 지금 나오긴 했지만, ActionScript만을 심오하게 다룬 책은 국내에 많이 없었던 것이 사실이죠. 대부분 나와있는 Flash계열의 책은 Flex Framework의 사용법이나, Flash책에서 간간히 보이는 ActionScript가 다 인데, 이 책에는 Actionscript의 문법과 특징들을 쉽게 설명해 놓은 것 같습니다.

번역하시느라 너무 수고 많이 하셨어요~
사용자 삽입 이미지

사진을 잘 찍어서 얇게 보인다-_- 사실 엄청두꺼움-_-


머드초보 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]