ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] Naver API 호출
    C#/기초 2025. 6. 5. 08:48

     

     

     

    class News 

    class News
    {
        public string Title { get; set; }
        public string OriginalLink { get; set; }
        public string Link { get; set; }
        public string Description { get; set; }
        public DateTime Pubdate { get; set; }
    
        public News(string title, string originalLink, string link, string description, DateTime pubdate)
        {
            Title = title;
            OriginalLink = originalLink;
            Link = link;
            Description = description;
            Pubdate = pubdate;
        }
    
        public static News Make(XmlNode xn)
        {
            try
            {
                string title = Strip(xn.SelectSingleNode("title").InnerText);
                string olink = Strip(xn.SelectSingleNode("originallink").InnerText);
                string link = Strip(xn.SelectSingleNode("link").InnerText);
                string description = Strip(xn.SelectSingleNode("description").InnerText);
                DateTime pubdate = DateTime.Parse(xn.SelectSingleNode("pubDate").InnerText);
                return new News(title, olink, link, description, pubdate);
            }
            catch
            {
                return null;
            }
        }
    
        private static string Strip(string innerText)
        {
            int s = innerText.IndexOf("<");
            int e = innerText.IndexOf(">");
            while (s < e)
            {
                string b = innerText.Substring(0, s);
                string a = innerText.Substring(e + 1);
                innerText = b + a;
                s = innerText.IndexOf("<");
                e = innerText.IndexOf(">");
            }
            return innerText;
        }
    
        public override string ToString()
        {
            return Title;
        }
    }

     

     

     

    class NaverNews

    class NaverNews
    {
        public string SRC { get; set; }
        public string ID { get; set; }
        public string Secret { get; set; }
    
        public NaverNews(string iD, string secret)
        {
            this.ID = iD;
            this.Secret = secret;
        }
    
        public int Find(string src)
        {
            this.SRC = src;
            Stream stream;
            string url = $"https://openapi.naver.com/v1/search/news.xml?query={SRC}&sort=date";
            XmlDocument xdoc = MakeXMLDocument(url, out stream);
            XmlNode node = xdoc.SelectSingleNode("rss");
            XmlNode n = node.SelectSingleNode("channel");
            int total = int.Parse(n.SelectSingleNode("total").InnerText);
            stream.Close();
            return total;
        }
    
        private XmlDocument MakeXMLDocument(string url, out Stream stream)
        {
            WebRequest request = null;
            request = WebRequest.Create(url);
            request.Headers.Add("X-Naver-Client-Id", ID);
            request.Headers.Add("X-Naver-Client-Secret", Secret);
    
            WebResponse response = request.GetResponse();
            stream = response.GetResponseStream();
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(stream);
            return xdoc;
        }
    
        public List<News> FindNewsToXML(int start, int display)
        {
            Stream stream;
            string url = $"https://openapi.naver.com/v1/search/news.xml?query={SRC}&display={display}&start={start}&sort=date";
    
            XmlDocument xdoc = MakeXMLDocument(url, out stream);
            XmlNode node = xdoc.SelectSingleNode("rss");
            XmlNode n = node.SelectSingleNode("channel");
            XmlNodeList xnl = n.SelectNodes("item");
            List<News> nc = new List<News>();
            News news;
            foreach (XmlNode xn in xnl)
            {
                news = News.Make(xn);
                if (news == null)
                {
                    break;
                }
                nc.Add(news);
            }
            stream.Close();
            return nc;
        }
    
        private async Task<string> MakeJSONDocumentAsync(string url)
        {
            try
            {
                HttpClient client = new HttpClient();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Add("X-Naver-Client-Id", ID);
                client.DefaultRequestHeaders.Add("X-Naver-Client-Secret", Secret);
    
                using (var response = client.GetAsync(new Uri(url)).Result)
                {
                    return await response.Content.ReadAsStringAsync();
                }
            }
            catch
            {
                return null;
            }
        }
    
        private string MakeJSONDocument(string url)
        {
            string responseFromServer = string.Empty;
    
            try
            {
                WebRequest request = WebRequest.Create(url);
    
                request.Method = "GET";
                request.ContentType = "application/json";
                request.Headers["X-Naver-Client-Id"] = ID;
                request.Headers["X-Naver-Client-Secret"] = Secret;
    
                using (WebResponse response = request.GetResponse())
                using (Stream dataStream = response.GetResponseStream())
                using (StreamReader reader = new StreamReader(dataStream))
                    responseFromServer = reader.ReadToEnd();
            }
            catch
            {
                return null;
            }
    
            return responseFromServer;
        }
    
    
        public List<News> FindNewsJson(int start, int display)
        {
            string url = $"https://openapi.naver.com/v1/search/news.json?query={SRC}&display={display}&start={start}&sort=sim";
    
            //var parseJson = JObject.Parse(MakeJSONDocument(url));
            var parseJson = JObject.Parse(MakeJSONDocumentAsync(url).Result);
    
            // var QueryResultCount = Convert.ToInt32(parseJson["display"]);
            // var TotalResultCount = Convert.ToInt32(parseJson["total"]);
    
            List<News> news = JsonConvert.DeserializeObject<List<News>>(parseJson["items"].ToString());
    
            return news;
        }
        public List<News> FindBlogsJson(int start, int display)
        {
            string url = $"https://openapi.naver.com/v1/search/blog.json?query={SRC}&display={display}&start={start}&sort=sim";
            //var parseJson = JObject.Parse(MakeJSONDocument(url));
            var parseJson = JObject.Parse(MakeJSONDocumentAsync(url).Result);
            // var QueryResultCount = Convert.ToInt32(parseJson["display"]);
            // var TotalResultCount = Convert.ToInt32(parseJson["total"]);
            List<News> news = JsonConvert.DeserializeObject<List<News>>(parseJson["items"].ToString());
            return news;
        }
    }

     

     

     

    mcpClient = await GetMcpClientAsync();

       async Task<IMcpClient> GetMcpClientAsync()
       {
           try
           {
               // Create Sse MCP client connecting to our MCP server
               var mcpClient = await McpClientFactory.CreateAsync(
                   new SseClientTransport(
                       new SseClientTransportOptions
                       {
                           Name = "SseClientTest",
                           Endpoint = new Uri("https://localhost:7051/sse"),
                       }
                   )
               );
               return mcpClient;
           }
           catch (Exception e)
           {
               Trace.WriteLine($"Error creating MCP client: {e.Message}");
               return null;
           }
       }

     

    GetNews

        public async Task<IEnumerable<SearchedItem>> GetNews(string searchedText)
        {
            var searchedItems = new List<SearchedItem>();
            try
            {
    
                var searchNaverNews = await mcpClient.CallToolAsync(
                    "NaverNewsSearch",
                    new Dictionary<string, object?>() { ["message"] = searchedText },
                    cancellationToken: CancellationToken.None);
    
                foreach (var item in searchNaverNews.Content)
                {
                    var searchedItem = new SearchedItem
                    {
                        Name = item.Text?.Split('\n')[0],
                        Content = item.Text?.Split('\n')[1],
                        Link = item.Text?.Split('\n')[2],
                        //Type = item.Text?.Split('\n')[3] ?? "Feature"
                    };
    
                    searchedItems.Add(searchedItem);
    
                    Trace.WriteLine("==============================================================================");
                    Trace.WriteLine($"Title: {item?.Text?.Split('\n')[0]}");
                    Trace.WriteLine($"Description: {item?.Text?.Split('\n')[1]}");
                    Trace.WriteLine($"Link: {item?.Text?.Split('\n')[2]}");
                    Trace.WriteLine($"PubDate: {item?.Text?.Split('\n')[3]}");
    
                }
    
            }
            catch (Exception e)
            {
                Trace.WriteLine($"Error fetching news: {e.Message}");
            }
            return searchedItems;
    
        }

     

     

     


     

     

    https://velog.io/@ansalstmd/C-%EC%95%8C%EC%95%84%EA%B0%80%EA%B8%B0-6.-C-%EB%84%A4%EC%9D%B4%EB%B2%84-API%EB%A1%9C-%EB%89%B4%EC%8A%A4-%EC%A0%95%EB%B3%B4-%EB%B0%9B%EC%95%84%EC%98%A4%EA%B8%B0

     

    C# 알아가기 (6. C# 네이버 API로 뉴스 정보 받아오기)

    https://ehpub.co.kr/news-crawling-library-make-csharp-data-analysis/http://www.toughman.pe.kr/2017/05/c%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C

    velog.io

     

     

    https://developers.naver.com/docs/serviceapi/search/blog/blog.md#%EB%B8%94%EB%A1%9C%EA%B7%B8

     

    검색 > 블로그 - Search API

    검색 > 블로그 블로그 검색 개요 개요 검색 API와 블로그 검색 개요 검색 API는 네이버 검색 결과를 뉴스, 백과사전, 블로그, 쇼핑, 웹 문서, 전문정보, 지식iN, 책, 카페글 등 분야별로 볼 수 있는 API

    developers.naver.com

     

     

     

    728x90

    'C# > 기초' 카테고리의 다른 글

    [C#] Configure C# language version  (0) 2025.05.29
    [C#] WebRequest to HttpClient Migration  (0) 2025.05.28
    [C#] ObservableCollection Addrange  (0) 2025.05.14
    [C#] warning disable  (0) 2025.05.08
    [C#] Return 반환 값 2개  (0) 2025.05.08

    댓글

Designed by Tistory.