영어단어별 사용빈도를 알고싶다는 의견이 있어서 고민을 좀 했습니다.
구글이나 네이버에서 사용빈도를 찾으면 되겠다 싶어서 알아봤는데요.
하루에 보낼수 있는 쿼리수가 구글보다는 네이버가 많더군요..가끔 국산이 좋을때도 있습니다.^^

네이버 오픈API를 사용해서 간단한 어플을 만들어 봤습니다. 물론 디자인은 제가 했습니다.(요즘 아트에 대한 열정이~)


기능을 정리하면..

1.엑셀파일에 정리된 단어들을 불러온다.
2.각 단어별로 네이버오픈API를 사용하여 쿼리를 날린뒤 결과값을 받는다.
3.다시 엑셀파일에 저장한다.


입니다.  단순하죠? 하지만 만드는덴 하루 죙일 걸렸습니다.


그런 간단히 소스를 설명보면요..

1. 엑셀파일 불러오기.

public void readExcelFile() {
            string str = getFileName();
                       
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkbook;
            Excel.Worksheet xlSheet;
            object TypMissing = Type.Missing;

            xlApp.Visible = false; // 화면에서 안보이기

            xlApp.DisplayAlerts = false; // 에러메세지 안보이기

            if (File.Exists(str))
            {
                xlWorkbook = xlApp.Workbooks.Open(str, TypMissing, TypMissing, TypMissing, TypMissing,
                    TypMissing, TypMissing,
                    TypMissing, TypMissing, TypMissing, TypMissing, TypMissing, TypMissing, TypMissing, TypMissing);


                // 워크 시트 중에 1번째 것을 가져온다.
                xlSheet = (Excel.Worksheet)xlApp.Sheets.get_Item(1);

                string[] ret = new string[3];
                int i = 1;                     
                try
                {
                    Excel.Range RangeMax = xlSheet.get_Range("A1", Type.Missing);

                    // 값이 있는 가장 마지막 행로 이동
                    RangeMax = RangeMax.get_End(Microsoft.Office.Interop.Excel.XlDirection.xlDown);
                    string lastWord = RangeMax.Value2.ToString();
                   
                    bool bFlag = true;
                   
                    while (bFlag)
                    {
                      
                        Excel.Range Range1 = xlSheet.get_Range("A" + i, Type.Missing);
                        Excel.Range Range2 = xlSheet.get_Range("B" + i, Type.Missing);
                     
                        ret[0] = (i).ToString();
                        ret[1] = Range1.Value2.ToString();
                     
                        this.listView1.Items.Add(new ListViewItem(ret));
                        i++;

                        if (ret[1].Equals(lastWord))
                        {
                            bFlag = false;
                        }

                        }
                   
                }
                TotalWordNumber = (i -1);

                xlApp.Workbooks.Close();

                xlApp.Quit();  // 엑셀 오브젝트를 종료합니다.
                xlWorkbook = null;
                xlSheet = null;
                xlApp = null;
               
                toolStripProgressBar1.Value = 100;
              
                MessageBox.Show("화일읽기가 종료 되었습니다!");
            }
            else
            {
                MessageBox.Show("화일읽기가 실패 하였습니다!");
            }
}


2. 네이버 오픈API에 쿼리 날리기..

            XmlDocument doc = new XmlDocument();
                
            toolStripProgressBar1.Maximum = TotalWordNumber;
            toolStripProgressBar1.Value = 0;

            for (int i = 0; i < TotalWordNumber;i++ )           
            {
                doc.Load(string.Format("http://openapi.naver.com/search?key={0}&query={1}&display=1&start=1&target=webkr",
                    key, HttpUtility.UrlEncode(this.listView1.Items[i].SubItems[1].Text), Encoding.GetEncoding("utf-8")));
                XmlNode node = doc.SelectSingleNode("rss");

                foreach (XmlNode el in node.SelectNodes("channel"))
                {
                    ret[0] = this.listView1.Items[i].SubItems[1].Text;
                    ret[1] = el.SelectSingleNode("total").InnerText;   
                    this.listView2.Items.Add(new ListViewItem(ret));
                }

                toolStripProgressBar1.Value++;
            }

3. 결과를 엑셀파일에 저장하기.

      try{
                application = new Excel.Application();
                application.Visible = false;       // 엑셀창이 나타나지 않고 작업을 진행하기 위해서...


                // 만약 같은 파일이 존재하면
                if (System.IO.File.Exists((string)fileName))
                {
                    System.IO.File.Delete((string)fileName);
                }

                workbook = application.Workbooks.Add(Type.Missing);
                worksheet = //(Excel.Worksheet)workbook.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                worksheet = (Excel.Worksheet)workbook.Sheets["Sheet1"];

                for (int i = 1; i <= TotalWordNumber; i++)
                {
                    Excel.Range range = worksheet.get_Range("A" + i, "B" + i);
                    System.Array values = (System.Array)range.Cells.Value2;

                        worksheet.Cells[i, 1] = this.listView2.Items[i - 1].SubItems[0].Text; //단어 스팰
                        worksheet.Cells[i, 2] = this.listView2.Items[i - 1].SubItems[1].Text; // 검색개수

                        worksheet.get_Range("A1", "B1").EntireColumn.AutoFit();
                                       }
                worksheet.get_Range("A1", "B1").EntireColumn.AutoFit();
                workbook.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                   Excel.XlSaveAsAccessMode.xlShared, Excel.XlSaveConflictResolution.xlLocalSessionChanges,
                  Type.Missing, Type.Missing, Type.Missing, Type.Missing);

            } 


별거 없죠? 아무튼 이런 툴도 쉽게 되는거 보니..
웹페이지에서 오픈API말고 그냥 쓱싹 데이타 긁어오는 어플 하나 만들어 봐야겠습니다. 여기저기 응용할 곳이 많을듯 하네요.

그럼 오늘은 여기까지......


To be continued.    -夜昧-

## 아놔..티스토리는 소스이쁘게 보이는 컴포넌트를 왜 지원 안하는거여...