오픈 API를 이용한 간단한 번역프로그램
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Xml;
namespace translator
{
public partial class Form1 : Form
{
const string AppId = "오픈API 인증코드 얻으세요!";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.comboBox1.Items.Add("ko"); //콤보박스에 아이템추가
this.comboBox1.Items.Add("en");
this.comboBox2.Items.Add("ko");
this.comboBox2.Items.Add("en");
this.comboBox1.SelectedIndex = 0; //0번째 요소 꺼내오기
this.comboBox2.SelectedIndex = 1;
}
private void button1_Click_1(object sender, EventArgs e)
{
//웹으로부터 값을 받아오기 위해서 선언 번역할 한글 현재 형태 번역할 형태
HttpWebRequest request = BuildRequest(this.textBox.Text, this.comboBox1.SelectedItem.ToString(), this.comboBox2.SelectedItem.ToString());
try
{
// 요청에 응답했을경우~
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // 리소스를 받아옵니다.
this.textBox1.Text = DisplayResponse(response); // 리소스를 번역된 창에 뿌려줌 그전에...DisplayResponse(response)으로 고고~
}
catch (WebException ex)
{
// 응답하지 않았을경우!, 네트워크문제~
Console.WriteLine(ex.Message);
}
}
public static HttpWebRequest BuildRequest(string str, string SourceLanguage, string TargetLanguage) //번역할 값, 현재 언어, 번역될 언어
{
string requestString = "http://api.bing.net/xml.aspx?" // open API에서 xml 받아와서 필요한 태그만 씀
// 공통된 요청필드들.. (필수!)
+ "AppId=" + AppId
+ "&Query=" + str
+ "&Sources=Translation"
// 공통된 요청필드들.. (선택적으로)
+ "&Version=2.2"
// 특정소스타입 가져오기 (필수!!) // 우리에게 필요한건 번역을 담당하는 부분
+ "&Translation.SourceLanguage=" + SourceLanguage
+ "&Translation.TargetLanguage=" + TargetLanguage;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestString); // 요청을 생성하고 초기화
return request;
}
static string DisplayResponse(HttpWebResponse response)
{
// XmlDocument로 응답을 로드함.
XmlDocument document = new XmlDocument();
document.Load(response.GetResponseStream());
//namespace 관리자에 대해서 네임스페이스 추가
XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable); //XmlNamespaceManager 를통한 xml 파싱 변환작업
//yweather:forecast --> ":"
nsmgr.AddNamespace(
"api", //api의 값을 파싱하기위해서
"http://schemas.microsoft.com/LiveSearch/2008/04/XML/element");
XmlNodeList errors = document.DocumentElement.SelectNodes( //에러가 발생할 경우
"./api:Errors/api:Error",
nsmgr);
string result = string.Empty; // " "
if (errors.Count > 0)
{
// 에러가 발생했을 경우
DisplayErrors(errors);
}
else
{
// 에러가 발생하지 않을 경우 값을 result에 넣자~
result = DisplayResults(document.DocumentElement, nsmgr);//document.DocumentElement 페이지를 옴겨다닐때 기본요소들의 값을 가져오기 위해서, 파싱데이터
}
return result;
}
static string DisplayResults(XmlNode root, XmlNamespaceManager nsmgr)
{
string version = root.SelectSingleNode("./@Version", nsmgr).InnerText; // 버전과 파싱받은 값 InnerText: 시작태그와 종료태그 사이의 값을 가져옴
string searchTerms = root.SelectSingleNode( //SelectSingleNode 패턴과 일치하는 제일 첫번째의 값을 가저온다.
"./api:Query/api:SearchTerms",
nsmgr).InnerText;
// 결과를 헤더에 표시
Console.WriteLine("Bing API Version " + version);
Console.WriteLine("Translation results for " + searchTerms);
Console.WriteLine();
// 네임스페이스 관리자 안에 네임스페이스 Translation SourceType 추가
nsmgr.AddNamespace(
"tra", //tra의 값을 파싱해가기위해서
"http://schemas.microsoft.com/LiveSearch/2008/04/XML/translation");
XmlNodeList results = root.SelectNodes( //드디어 변역된 값을 받아 오기 위한 실질적인 태그를 가저옴
"./tra:Translation/tra:Results/tra:TranslationResult",
nsmgr);
// Display the Translation results.
string MsgResult = string.Empty;//""
foreach (XmlNode result in results)
{
MsgResult = result.SelectSingleNode("./tra:TranslatedTerm", nsmgr).InnerText; // 변역된 값을 받아와서
}
return MsgResult; //리턴해줌
}
static void DisplayErrors(XmlNodeList errors)
{
// Iterate over the list of errors and display error details.
Console.WriteLine("Errors:");
Console.WriteLine();
foreach (XmlNode error in errors)
{
foreach (XmlNode detail in error.ChildNodes)
{
Console.WriteLine(detail.Name + ": " + detail.InnerText);
}
Console.WriteLine();
}
}
}
}
'1. IT Story > Development' 카테고리의 다른 글
무료 IT 개발 언어공부, 코딩공부 유튜브 TOP5 (0) | 2021.01.26 |
---|---|
heapSort (0) | 2012.04.04 |
selectionSort (0) | 2012.04.04 |
shellSort (0) | 2012.04.04 |
ChatClient (0) | 2012.03.29 |
MultiChatServer (0) | 2012.03.29 |
MultiChatClient (0) | 2012.03.29 |
큐를 이용한 간단한 구직Pro (0) | 2012.03.29 |