Project Description
<project name>Linq to Naver </project name>
<programming language>C#, CSharp</programming language>


Feedback
Your feedback and thoughts on LINQ to Naver are vital to guiding the direction of this project. Please submit your feedback, feature suggestions and bugs into the Issue Trackerhttp://linqtonaver.codeplex.com/workitem/list/basic or Discussionhttp://linqtonaver.codeplex.com/Thread/List.aspx Forum

Blog Posts
http://smack.kr/366

제목 : LinqToNaver

개요 :
이 프로젝트는 Naver OpenApi를 LINQ Custom Provider 형식으로 구현 한 것입니다.
LINQ의 한국어 예제가 드물고, LINQ의 활용성을 제시합니다.

목적 :
Language INtegrated Query 는 LinqToSql, LinqToEntities ( Entity Framework) 의 DB 와 Interact 하는 SQL의 또다른 방법으로만 알려져 있기도 합니다.

LINQ는 이름에서도 알수 있듯이 '언어에 통합된 쿼리' 로써 다양한 형태의 자료를 '질의(쿼리)' 형식으로 처리할 수 있음을 이 예제를 통해서 보입니다.
Lambda Expression과 Expression Visit 그리고, Queryable 메소드를 확장함으로써 Information Hiding을 달성할 수 있음을 보여 줍니다.



LinqToNaver 디자인 Trade-Off

1. NaverParser 에 SearchResult의 모든 Parse 메소드를 넣을 수 있으나, 코드가 너무 많아짐에 따라 각각의 Result 타입에 위치시켰습니다.

2. SearchResult를 Abstract화 시키고, Parse시에 Abstrct Factory 디자인 패턴으로, QueryType을 추가할 때는 NaverSearchResult로 부터 파생시키고, Factory 등등의 클래스에 연결함으로써 추가할 수 있습니다.

3. Naver OpenApi의 Response Result는 RSS2.0 명세로 받아 올수 있어, 각각의 Result를 RSS2.0에 완전히 맞출 수도 있겠으나,
(예를 들어 RSS 클래스를 Channel , Item Collection 의 구성으로 만들 수 있으나),
OpenSearch 스타일의 명세 맞춤 (한개의 레코드가 검색결과 갯수 등의 모든 정보를 담는 것.)을 도모하고,
RSS.Item.Title 방식으로 깊이를 가지지 않게 하기 위해 한개의 클래스에 풀었습니다.



PS:
Naver OpenApi의 모든 섹션을 구현하지는 않았습니다. 필요하신 분들은 같은 패턴으로 구현하시면 됩니다.
Daum Api도 같은 방법으로 구현할 수 있습니다.
네이버 동영상 API는 2010년 4월 29일 종료 된답니다.


사용 예제
        //네이버 API 키를 대입하세요.
        static string AppKey = "";

            //추가 파라미터를 사용하는 경우. Sort 
            //웹으로 요청 되는 URL : http://openapi.naver.com/search?key=당신의키&target=news&query=아이폰&display=5&start=1&sort=date
            NaverContext context = new NaverContext(AppKey);
            var query = (from p in context.Newsis
                         where p.Query == Keyword && p.Sort == "date" 
                        select p).Skip(1).Take(5);

            ObjectDumper.Write(query);

            Console.WriteLine("---------------- 블로그 검색 결과 -----------------------");

            var query2 = (from p in context.Blogs
                          where p.Query == Keyword && p.Sort == "sim" 
                         select p).Skip(1).Take(5);

            ObjectDumper.Write(query2);



            Console.WriteLine("----------------실시간 인기 키워드 결과 -----------------------");

            var query3 = (from p in context.Ranks
                          where p.Query == "nexearch"
                          select p);

            ObjectDumper.Write(query3);


            Console.WriteLine("----------------추천 키워드 결과 -----------------------");

            var query4 = (from p in context.Recommends
                          where p.Query == Keyword
                          select p);

            ObjectDumper.Write(query4);



            Console.WriteLine("----------------웹 문서 결과 -----------------------");
            //Queryable 메소드 확장을 이용하는 방법.
            //ScopeResults Extension 메소드를 사용.
            var query5 = (from p in context.Webkrs.ScopeResults("smack.kr")
                          where p.Query == Keyword
                          select p);

            ObjectDumper.Write(query5);



다운로드 Project
http://linqtonaver.codeplex.com/releases/view/42908

**Delete the following note before publishing **

This project is currently in setup mode and only available to project coordinators and developers. Once you have finished setting up your project you can publish it to make it available to all CodePlex visitors.

There are three requirements before you publish:

- Edit this page to provide information about your project
- Upload the initial source code for your project
- Add your project license

Additional information on starting a new project is available here: Project Startup Guide.

Last edited Apr 1, 2010 at 12:43 AM by smack, version 3