using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.Windows.Forms; using WindowsFormsApp1; using System.Text.RegularExpressions; namespace ISBN_Check_test { public partial class Form1 : Form { private int rowidx; public Form1() { InitializeComponent(); this.Text = $"{Application.ProductName} ver {Application.ProductVersion}"; } private void Form1_Load(object sender, EventArgs e) { string[] api_list = { "다음", "네이버", "알라딘" }; cb_api.Items.AddRange(api_list); } private void button2_Click(object sender, EventArgs e) { for (int a = 0; a < dataGridView1.Rows.Count - 1; a++) { if (dataGridView1.Rows[a].DefaultCellStyle.BackColor != Color.Yellow) { dataGridView1.Rows[a].Cells["Column1"].Value = ""; dataGridView1.Rows[a].DefaultCellStyle.BackColor = Color.Empty; } } } private void button1_Click(object sender, EventArgs e) { button2_Click(null, null); if (cb_api.SelectedIndex == -1) { MessageBox.Show("조건이 선택되지 않았습니다."); return; } if (cb_filter.SelectedIndex == -1) { MessageBox.Show("조건이 선택되지 않았습니다."); return; } Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); var sistr = start_idx.Text.Trim(); var eistr = end_idx.Text.Trim(); if (string.IsNullOrEmpty(sistr)) sistr = "1"; if (string.IsNullOrEmpty(eistr)) eistr = "1"; if (int.TryParse(sistr, out int si) == false) { MessageBox.Show("시작번호가 올바르지 않습니다"); start_idx.Focus(); return; } if (int.TryParse(eistr, out int ei) == false) { MessageBox.Show("종료번호가 올바르지 않습니다"); start_idx.Focus(); return; } ei = ei - 1; si = si - 1; if(si < 0 || ei <0) { MessageBox.Show("시작,종료번호를 확인하세요"); return; } if (ei < si) { MessageBox.Show("종료번호는 시작번호보다 같거나 커야 합니다"); return; } progressBar1.Style = ProgressBarStyle.Continuous; progressBar1.Minimum = si; progressBar1.Maximum = ei; progressBar1.Step = 1; progressBar1.Value = progressBar1.Minimum; switch (cb_api.SelectedIndex) { case 0: Daum_API(dataGridView1, si, ei); break; case 1: Naver_API(dataGridView1, si, ei); break; case 2: Aladin_API(dataGridView1, si, ei); break; } stopwatch.Stop(); TimeSpan ts = stopwatch.Elapsed; string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); label1.Text = elapsedTime; rowidx = 0; // 총 검색 횟수, 일치, 중복 MessageBox.Show("검색이 완료되었습니다!"); dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0]; this.ActiveControl = dataGridView1; } /// /// 알라딘 API /// /// private void Aladin_API(DataGridView gridview, int start, int end) { // 도서명 / 저자 / 출판사 / isbn / 정가 // 발행일 / 도서분류 / 재고 string[] param = { "title", "author", "publisher", "isbn13", "priceStandard", "pubDate", "categoryName", "stockStatus", }; API api = new API(); for (int a = start; a <= end; a++) { process_Sub(); string type; switch (cb_filter.SelectedIndex) { case 0: type = "Keyword"; break; case 1: type = "Title"; break; case 2: type = "Author"; break; case 3: type = "Publisher"; break; case 4: type = "ISBN13"; break; default: type = ""; break; } // string query = dataGridView1.Rows[a].Cells["isbn"].Value?.ToString() ?? string.Empty; string query = Set_query(type, a ); //a=는줄번호이고 idx는 -1 해야함 if (gridview.Rows[a].DefaultCellStyle.BackColor == Color.Yellow) continue; else if (gridview.Rows[a ].DefaultCellStyle.BackColor == Color.LightGray) gridview.Rows[a ].DefaultCellStyle.BackColor = Color.Empty; // string aladin = api.Aladin(query, "ISBN13", param); string aladin = api.Aladin(query, type, param); insert_By_Aladin(aladin, a); try { richTextBox1.Text = aladin; } catch { } } } string Set_query(string type, int idx) { string result = string.Empty; if (type == "Keyword") result = (dataGridView1.Rows[idx].Cells["book_name"].Value?.ToString() ?? string.Empty) + dataGridView1.Rows[idx].Cells["author"].Value?.ToString() ?? string.Empty; if (type == "Title") result = dataGridView1.Rows[idx].Cells["book_name"].Value?.ToString() ?? string.Empty; if (type == "Author") result = dataGridView1.Rows[idx].Cells["author"].Value?.ToString() ?? string.Empty; if (type == "Publisher") result = dataGridView1.Rows[idx].Cells["book_comp"].Value?.ToString() ?? string.Empty; if (type == "ISBN13") result = dataGridView1.Rows[idx].Cells["isbn"].Value?.ToString() ?? string.Empty; return result; } private void Naver_API(DataGridView gridview, int start, int end) { // 도서명 / 저자 / 출판사 / isbn / 정가 // 발행일 / 도서분류 / 재고 string[] param = { "title", "author", "publisher", "isbn", "price", "pubdate", "discount" }; API api = new API(); List L_type = new List(); List L_Array = new List(); for (int a = start; a <= end; a++) { L_type.Clear(); L_Array.Clear(); process_Sub(); if (gridview.Rows[a].DefaultCellStyle.BackColor == Color.Yellow) continue; else if (gridview.Rows[a].DefaultCellStyle.BackColor == Color.LightGray) gridview.Rows[a].DefaultCellStyle.BackColor = Color.Empty; #region 필터적용 switch (cb_filter.SelectedIndex) { case 0: L_type.Add("d_titl"); L_Array.Add(gridview.Rows[a].Cells["book_name"].Value.ToString()); break; case 1: L_type.Add("d_auth"); L_Array.Add(gridview.Rows[a].Cells["author"].Value.ToString()); break; case 2: L_type.Add("d_publ"); L_Array.Add(gridview.Rows[a].Cells["book_comp"].Value.ToString()); break; case 3: L_type.Add("d_titl"); L_type.Add("d_auth"); L_Array.Add(gridview.Rows[a].Cells["book_name"].Value.ToString()); L_Array.Add(gridview.Rows[a].Cells["author"].Value.ToString()); break; case 4: L_type.Add("d_titl"); L_type.Add("d_publ"); L_Array.Add(gridview.Rows[a].Cells["book_name"].Value.ToString()); L_Array.Add(gridview.Rows[a].Cells["book_comp"].Value.ToString()); break; case 5: L_type.Add("d_auth"); L_type.Add("d_publ"); L_Array.Add(gridview.Rows[a].Cells["author"].Value.ToString()); L_Array.Add(gridview.Rows[a].Cells["book_comp"].Value.ToString()); break; case 6: L_type.Add("d_titl"); L_type.Add("d_auth"); L_type.Add("d_publ"); L_Array.Add(gridview.Rows[a].Cells["book_name"].Value.ToString()); L_Array.Add(gridview.Rows[a].Cells["author"].Value.ToString()); L_Array.Add(gridview.Rows[a].Cells["book_comp"].Value.ToString()); break; } #endregion string[] arrayType = L_type.ToArray(); string[] arrayValue = L_Array.ToArray(); string result = api.Naver(arrayValue, arrayType, param); insert_By_Naver(result, a); Thread.Sleep(700); } } private void Daum_API(DataGridView gridview, int start, int end) { string[] param = { "title", "authors", "publisher", "isbn", "price", "datetime", "status" }; string type = string.Empty; string query = string.Empty; API api = new API(); for (int a = start; a <= end; a++) { process_Sub(); if (gridview.Rows[a].DefaultCellStyle.BackColor == Color.Yellow) continue; else if (gridview.Rows[a].DefaultCellStyle.BackColor == Color.LightGray) gridview.Rows[a].DefaultCellStyle.BackColor = Color.Empty; switch (cb_filter.SelectedIndex) { case 0: type = "title"; query = gridview.Rows[a].Cells["book_name"].Value?.ToString() ?? string.Empty; break; case 1: type = "person"; query = gridview.Rows[a].Cells["author"].Value?.ToString() ?? string.Empty; break; case 2: type = "publisher"; query = gridview.Rows[a].Cells["book_comp"].Value?.ToString() ?? string.Empty; break; } if (query == "") { continue; } string result = api.Daum(query, type, param); richTextBox1.Text = result; insert_By_Daum(result, a); } } private void process_Sub() { progressBar1.PerformStep(); } void insert_By_Aladin(string data, int row) { if (row >0) { dataGridView1.Rows[row - 1].Selected = false; } dataGridView1.Rows[row ].Selected = true; string[] insert = data.Split('|'); if (data == "") { return; } // pubDate형 보기편하게 DateTime형으로 재정리 string newstring = ""; try { newstring = String.Format("{0:yyyy/MM/dd}", DateTime.Parse(insert[5].Remove(insert[5].IndexOf(" G")))); } catch (Exception ex) { MessageBox.Show(data); } for (int a = 0; a < insert.Length; a++) { if (a % 8 == 6) { insert[a] = Aladin_CategorySort(insert[a]); } } dataGridView1.Rows[row].Cells["Column1"].Value += string.Join("|", insert) + "|"; dataGridView1.Rows[row].DefaultCellStyle.BackColor = Color.LightGray; if (cb_filter.SelectedItem.ToString() == "별치조사") input_api_aladin(insert, row, newstring); input_api(insert, row, newstring); } string Aladin_CategorySort(string insert) { // 도서 분류 필요한 데이터로 재정리 int top = insert.IndexOf('>'); int mid = insert.IndexOf('>', top + 1); int bot = insert.IndexOf('>', mid + 1); if (bot < 0) { insert = insert.Substring(top + 1); } else { insert = insert.Substring(top + 1, bot - top - 1); } return insert; } void input_api_aladin(string[] data, int row, string date) { dataGridView1.Rows[row].Cells["book_name"].Value = data[0]; dataGridView1.Rows[row].Cells["author"].Value = data[1]; dataGridView1.Rows[row].Cells["book_comp"].Value = data[2]; dataGridView1.Rows[row].Cells["price2"].Value = data[4]; dataGridView1.Rows[row].Cells["pubDate"].Value = date; dataGridView1.Rows[row].Cells["category"].Value = data[6]; } void insert_By_Naver(string value, int row) { if (row > 0) { dataGridView1.Rows[row -1].Selected = false; } dataGridView1.Rows[row].Selected = true; if (value == "") return; value = value.Replace("", ""); value = value.Replace("", ""); string[] sp_data = value.Split('\t'); string[] grid = { "", "", "", "", "", "", "", "" }; #region 분류작업 /* 0 : 도서명 * 1 : 저자 * 2 : 출판사 * 3 : ISBN * 4 : 판매가 * 5 : 출간일 * 6 : 카테고리 * 7 : 품절/절판 */ for (int a = 0; a < sp_data.Length - 1; a++) { string[] data = sp_data[a].Split('|'); int idx = data.Length - 2; grid[0] = data[0]; grid[1] = data[1]; for (int b = 2; b < idx - 4; b++) { grid[1] += ", " + data[b]; } grid[2] = data[idx - 4]; if (data[idx - 3].Contains(" ") == true) { string[] isbn = data[idx - 3].Split(' '); grid[3] = isbn[1]; } else grid[3] = data[idx - 3]; grid[4] = data[idx - 2]; grid[5] = data[idx - 1]; if (data[idx] == "") grid[7] = "절판"; else grid[7] = ""; dataGridView1.Rows[row].Cells["Column1"].Value += string.Join("|", grid) + "|"; dataGridView1.Rows[row].DefaultCellStyle.BackColor = Color.LightGray; } #endregion if (sp_data.Length > 10) return; if (row > 0) { dataGridView1.Rows[row - 1].Selected = false; } dataGridView1.Rows[row].Selected = true; string newstring = ""; try { newstring = DateTime.ParseExact(grid[5], "yyyyMMdd", null).ToString("yyyy-MM-dd"); } catch { } input_api(grid, row, newstring); } void insert_By_Daum(string value, int row) { if (row > 0) { dataGridView1.Rows[row - 1].Selected = false; } dataGridView1.Rows[row].Selected = true; if (value == "") return; string[] sp_data = value.Split('\n'); string[] grid = { "", "", "", "", "", "", "", "" }; for (int a = 0; a < sp_data.Length - 1; a++) { string[] data = sp_data[a].Split('|'); grid[0] = data[0]; grid[1] = data[1]; grid[2] = data[2]; string[] tmp_isbn = data[3].Split(' '); if (tmp_isbn.Length < 2) grid[3] = data[3].Replace(" ", ""); else grid[3] = tmp_isbn[1]; grid[4] = data[4]; try { grid[5] = data[5].Substring(0, 10); } catch { } grid[7] = data[6]; dataGridView1.Rows[row].Cells["Column1"].Value += string.Join("|", grid) + "|"; dataGridView1.Rows[row].DefaultCellStyle.BackColor = Color.LightGray; } if (sp_data.Length > 10) return; if (row > 0) dataGridView1.Rows[row - 1].Selected = false; dataGridView1.Rows[row].Selected = true; bool[] chk = { false, false, false }; // string newstring = DateTime.ParseExact(grid[5], "yyyyMMdd", null).ToString("yyyy-MM-dd"); string newstring = grid[5]; input_api(grid, row, newstring); } /// /// API에서 가져온 데이터가 요구한 데이터와 일치하는지 알아보는 함수 /// /// 데이터 /// Grid의 row인덱스번호 /// 날짜 void input_api(string[] value, int idx, string date) { bool[] chk = { false, false, false }; string book_name = dataGridView1.Rows[idx].Cells["book_name"].Value?.ToString() ?? string.Empty; string author = dataGridView1.Rows[idx].Cells["author"].Value?.ToString() ?? string.Empty; string book_comp = dataGridView1.Rows[idx].Cells["book_comp"].Value?.ToString() ?? string.Empty; if (value[0] == book_name) chk[0] = true; if (value[1].Contains(author) == true) chk[1] = true; else if (author.Contains(value[1]) == true) chk[1] = true; else if (value[1] == author) chk[1] = true; if (value[2].Contains(book_comp) == true) chk[2] = true; else if (book_comp.Contains(value[2]) == true) chk[2] = true; else if (value[2] == book_comp) chk[2] = true; if (chk[0] == true && chk[1] == true && chk[2] == true) { dataGridView1.Rows[idx].Cells["isbn"].Value = value[3]; dataGridView1.Rows[idx].Cells["price2"].Value = value[4]; dataGridView1.Rows[idx].Cells["pubDate"].Value = date; //if (cb_api.SelectedIndex == 2) dataGridView1.Rows[idx].Cells["category"].Value = value[6]; dataGridView1.Rows[idx].Cells["sold_out"].Value = value[7]; dataGridView1.Rows[idx].DefaultCellStyle.BackColor = Color.Yellow; } count_res(); } #region 검색갯수 계산 private void count_res() { String_Text st = new String_Text(); int count = dataGridView1.Rows.Count; for (int a = 0; a < count; a++) { string search_data = dataGridView1.Rows[a].Cells["Column1"].Value?.ToString() ?? string.Empty; int tmp_count = st.Char_count(search_data, '|'); int lcount = tmp_count / 8; dataGridView1.Rows[a].Cells["count"].Value = lcount.ToString(); } } #endregion private void dataGridView1_KeyDown(object sender, KeyEventArgs e) { Skill_Grid sg = new Skill_Grid(); if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V)) { sg.Excel_to_DataGridView(sender, e); } else if (e.KeyCode == Keys.Delete) { sg.DataGrid_to_Delete(sender, e); } if (e.KeyCode == Keys.Enter) { dataGridView1_CellDoubleClick(null, null); rowidx++; } if (e.KeyCode == Keys.Up) { rowidx--; if (rowidx < 0) rowidx = 0; } if (e.KeyCode == Keys.Down) { rowidx++; if (rowidx > dataGridView1.Rows.Count - 1) rowidx = dataGridView1.Rows.Count - 1; } end_idx.Text = dataGridView1.Rows.Count.ToString(); } private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { Skill_Grid sg = new Skill_Grid(); sg.Print_Grid_Num(sender, e); } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { rowidx = e.RowIndex; if (rowidx < 0) return; if (dataGridView1.Rows[e.RowIndex].Cells["Column1"].Value == null) dataGridView1.Rows[e.RowIndex].Cells["Column1"].Value = ""; richTextBox1.Text = dataGridView1.Rows[e.RowIndex].Cells["Column1"].Value?.ToString() ?? string.Empty; } private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.Rows[rowidx].Cells["Column1"].Value == null || dataGridView1.Rows[rowidx].Cells["Column1"].Value.ToString() == "") { return; } Form2 f2 = new Form2(this); f2.row = rowidx; f2.Call_API = cb_api.Text; f2.Show(); } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back))) e.Handled = true; } private void cb_api_SelectedIndexChanged(object sender, EventArgs e) { cb_filter.Items.Clear(); if (cb_api.SelectedIndex == 0) { string[] daum = { "도서명", "저자", "출판사" }; cb_filter.Items.AddRange(daum); } else if (cb_api.SelectedIndex == 1) { string[] naver = { "도서명", "저자", "출판사", "도서명 + 저자", "도서명 + 출판사", "저자 + 출판사", "도서명 + 저자 + 출판사" }; cb_filter.Items.AddRange(naver); } else if (cb_api.SelectedIndex == 2) { string[] aladin = { "도서명 + 저자", "도서명", "저자", "출판사", "별치조사" }; cb_filter.Items.AddRange(aladin); } Must_Col(cb_api.SelectedIndex); } private void Must_Col(int cb_idx) { if (cb_idx == 0 || cb_idx == 1 || cb_idx == 2) { dataGridView1.Columns["isbn"].DefaultCellStyle.BackColor = Color.Empty; dataGridView1.Columns["book_name"].DefaultCellStyle.BackColor = Color.FromArgb(234, 226, 202); dataGridView1.Columns["author"].DefaultCellStyle.BackColor = Color.FromArgb(234, 226, 202); dataGridView1.Columns["book_comp"].DefaultCellStyle.BackColor = Color.FromArgb(234, 226, 202); } else { return; } } private void btn_Yes24_Click(object sender, EventArgs e) { Yes24 yes24 = new Yes24(this); yes24.Show(); } private void cb_filter_SelectedIndexChanged(object sender, EventArgs e) { if (cb_filter.SelectedItem.ToString() == "별치조사") { dataGridView1.Columns["isbn"].DefaultCellStyle.BackColor = Color.FromArgb(234, 226, 202); dataGridView1.Columns["book_name"].DefaultCellStyle.BackColor = Color.Empty; dataGridView1.Columns["author"].DefaultCellStyle.BackColor = Color.Empty; dataGridView1.Columns["book_comp"].DefaultCellStyle.BackColor = Color.Empty; } } private void label1_Click(object sender, EventArgs e) { if (System.Diagnostics.Debugger.IsAttached) { string[] lst = { "9791193110584", "9791168672260", "9788993858396", "9791171200351", "9791199239043", "9791194828112", "9791196026523", "9791194368359", "9791191744439", "9791198843067", "9788999712883", "9788999729188"}; foreach (var item in lst) this.dataGridView1.Rows.Add(new string[] { "", "", "", item }); end_idx.Text = (this.dataGridView1.Rows.Count - 1).ToString(); } } } }