using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
namespace ISBN_Check_test
{
class API
{
///
/// https://blog.aladin.co.kr/openapi 참고
///
///
///
///
///
public string[] Aladin(string Query, string QueryType, string[] Param)
{
string result = string.Empty;
// 쿼리 생성
string key = "ttbgloriabook1512001";
string site = "http://www.aladin.co.kr/ttb/api/ItemSearch.aspx";
string query = string.Format("{0}?query={1}&TTBKey={2}&output=xml&querytype={3}&MaxResults={4}",
site, Query, key, QueryType, 30.ToString());
// 쿼리를 입력인자로 WebRequest 개채 생성
WebRequest request = WebRequest.Create(query);
// WebRequest개체의 헤더에 인증키 포함시키기.
// request.Headers.Add("Authorization", header);
// WebResponse개체를 통해 서비스 요청.
WebResponse response = request.GetResponse();
// 결과문자열 확인
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String xml = reader.ReadToEnd();
stream.Close();
// xml형식을 json형식으로 변환
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var xdoc = XDocument.Parse(xml);
var xroot = xdoc.Root;
// XML에서 직접 totalResults와 item 추출 (XDocument 사용)
XNamespace ns = "http://www.aladin.co.kr/ttb/apiguide.aspx";
// totalResults 추출
string totalResults = xdoc.Descendants(ns + "totalResults").FirstOrDefault()?.Value ?? "0";
// item들 추출
var itemElements = xdoc.Descendants(ns + "item");
if (!itemElements.Any())
{
return new string[] { };
}
int length = itemElements.Count();
int ID_length = Param.Length;
// XML item들을 순회하면서 필요한 데이터 추출 (XDocument 사용)
List retval = new List();
foreach (var itemElement in itemElements)
{
string[] buffer = new string[ID_length];
for (int b = 0; b < ID_length; b++)
{
buffer[b] = itemElement.Element(ns + Param[b])?.Value ?? "";
}
//retval.Add(buffer);
return buffer;
}
return new string[] { };
}
///
/// https://blog.aladin.co.kr/openapi 참고
///
/// ISBN값
/// "ISBN"고정
/// 가져올 데이터
///
public string Aladin_lookup(string Query, string QueryType, string[] Param)
{
string result = string.Empty;
// 쿼리 생성
string key = "ttbgloriabook1512001";
string site = "http://www.aladin.co.kr/ttb/api/ItemLookUp.aspx";
string query = string.Format("{0}?TTBKey={1}&itemIdType={2}&ItemId={3}&OptResult=categoryIdList",
site, key, QueryType, Query);
// 쿼리를 입력인자로 WebRequest 개채 생성
WebRequest request = WebRequest.Create(query);
// WebRequest개체의 헤더에 인증키 포함시키기.
// request.Headers.Add("Authorization", header);
// WebResponse개체를 통해 서비스 요청.
WebResponse response = request.GetResponse();
// 결과문자열 확인
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String xml = reader.ReadToEnd();
stream.Close();
// xml형식을 json형식으로 변환
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var json = JsonConvert.SerializeXmlNode(doc);
// return json;
// json형식 분석을 위해 JavaScriptSerializer 개체 생성
JavaScriptSerializer js = new JavaScriptSerializer();
// 런타임에 개체를 확인하여 사용할수 있는 dynamic을 이용해 역직렬화
dynamic dob = js.Deserialize(json);
// "object"내에 있는것을 얻어오기 위해 다시 dynamic변수에 참조
dynamic docs = "";
try
{
docs = dob["object"]["item"];
}
catch
{
return "";
}
int length = 0;
int ID_length = Param.Length;
// 검색 결과가 1개 이하일 경우, 오류가 발생하여 try/catch문 사용.
try
{
// docs는 요소 컬렉션으로 object로 변환.
object[] buf = docs;
length = buf.Length;
}
catch
{
object buf = docs;
length = 1;
}
for (int a = 0; a < length; a++)
{
List tmp_data = new List();
for (int b = 0; b < ID_length; b++)
{
if (length == 1)
{
tmp_data.Add(docs[Param[b]]);
}
else
{
tmp_data.Add(docs[a][Param[b]]);
}
result += tmp_data[b] + "|";
}
result += "\n";
}
return result;
}
public string Naver(string[] Query, string[] QueryType, string[] Param)
{
string result = string.Empty;
string json = string.Empty;
// url 생성
string url = "https://openapi.naver.com/v1/search/book_adv?";
for (int a = 0; a < Query.Length; a++)
{
url += string.Format("{0}={1}&", QueryType[a], Query[a]);
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("X-Naver-Client-Id", "wYr0JczCBoDopq1NKTyQ"); // 클라이언트 아이디
request.Headers.Add("X-Naver-Client-Secret", "QHzeXadtO7"); // 클라이언트 시크릿
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string status = response.StatusCode.ToString();
if (status == "OK")
{
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
json = reader.ReadToEnd();
}
else
{
MessageBox.Show(status, "Error");
return "Error";
}
// json형식 분석을 위해 JavaScriptSerializer 개체 생성
JavaScriptSerializer js = new JavaScriptSerializer();
// 런타임에 개체를 확인하여 사용할수 있는 dynamic을 이용해 역직렬화
dynamic dob = js.Deserialize(json);
// "object"내에 있는것을 얻어오기 위해 다시 dynamic변수에 참조
dynamic docs = "";
try
{
// docs = dob["object"]["item"];
docs = dob["items"];
}
catch
{
return "";
}
int length = 0;
int ID_length = Param.Length;
// 검색 결과가 1개 이하일 경우, 오류가 발생하여 try/catch문 사용.
try
{
// docs는 요소 컬렉션으로 object로 변환.
object[] buf = docs;
length = buf.Length;
}
catch
{
object buf = docs;
length = 1;
}
for (int a = 0; a < length; a++)
{
List tmp_data = new List();
for (int b = 0; b < ID_length; b++)
{
tmp_data.Add(docs[a][Param[b]]);
result += tmp_data[b] + "|";
}
result += "\n\t";
}
return result;
}
public string Daum(string Query, string Type, string[] Param)
{
string result = string.Empty;
// url생성
string url = "https://dapi.kakao.com/v3/search/book";
string query = string.Format("{0}?query={1}&target={2}&", url, Query, Type);
WebRequest request = WebRequest.Create(query);
string header = "KakaoAK e3935565b731a2a6f32880c90d76403a";
request.Headers.Add("Authorization", header);
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string json = reader.ReadToEnd();
stream.Close();
JavaScriptSerializer js = new JavaScriptSerializer();
dynamic dob = js.Deserialize(json);
dynamic docs = dob["documents"];
object[] buf = docs;
int length = buf.Length;
int ID_length = Param.Length;
for (int a = 0; a < length; a++)
{
List