오픈 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
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,