영어단어별 사용빈도를 알고싶다는 의견이 있어서 고민을 좀 했습니다.
구글이나 네이버에서 사용빈도를 찾으면 되겠다 싶어서 알아봤는데요.
하루에 보낼수 있는 쿼리수가 구글보다는 네이버가 많더군요..가끔 국산이 좋을때도 있습니다.^^
네이버 오픈API를 사용해서 간단한 어플을 만들어 봤습니다. 물론 디자인은 제가 했습니다.(요즘 아트에 대한 열정이~)
기능을 정리하면..
2.각 단어별로 네이버오픈API를 사용하여 쿼리를 날린뒤 결과값을 받는다.
3.다시 엑셀파일에 저장한다.
입니다. 단순하죠? 하지만 만드는덴 하루 죙일 걸렸습니다.
그런 간단히 소스를 설명보면요..
1. 엑셀파일 불러오기.
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. 결과를 엑셀파일에 저장하기.
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. -夜昧-
## 아놔..티스토리는 소스이쁘게 보이는 컴포넌트를 왜 지원 안하는거여...