From e4b8ead0564aabf8660b92fccdc78f42ec2f7d81 Mon Sep 17 00:00:00 2001 From: arDTDev Date: Wed, 29 Oct 2025 23:15:04 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=8C=EB=9D=BC=EB=94=98=20API=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20=EC=B2=98=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=ED=99=94=20?= =?UTF-8?q?=EB=B0=8F=20URL=20=EB=B8=8C=EB=9D=BC=EC=9A=B0=EC=A0=80=20?= =?UTF-8?q?=EC=97=B4=EA=B8=B0=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AladinBookData 클래스 추가하여 API 응답 데이터 구조화 - ToString() 메서드 오버라이드로 파이프 구분자 형식 출력 지원 - Aladin_struct() 메서드 추가: List 반환 - 기존 Aladin() 메서드는 호환성 유지를 위해 보존 - URL 링크 클릭 시 탐색기 대신 기본 웹 브라우저로 열리도록 수정 (UseShellExecute = true) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ISBN_Check/Main/Form1.Designer.cs | 403 ++++++++++++--------- ISBN_Check/Main/Form1.cs | 241 ++++++++++-- ISBN_Check/Main/Form1.resx | 6 + ISBN_Check/Main/Form1_Sub.cs | 121 +++++++ ISBN_Check/Main/Properties/AssemblyInfo.cs | 4 +- 5 files changed, 567 insertions(+), 208 deletions(-) diff --git a/ISBN_Check/Main/Form1.Designer.cs b/ISBN_Check/Main/Form1.Designer.cs index 8c576e7..b7e87e1 100644 --- a/ISBN_Check/Main/Form1.Designer.cs +++ b/ISBN_Check/Main/Form1.Designer.cs @@ -29,12 +29,29 @@ namespace ISBN_Check_test /// private void InitializeComponent() { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); this.cb_filter = new System.Windows.Forms.ComboBox(); this.button1 = new System.Windows.Forms.Button(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.label1 = new System.Windows.Forms.Label(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.start_idx = new System.Windows.Forms.TextBox(); + this.end_idx = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.cb_api = new System.Windows.Forms.ComboBox(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.btn_Yes24 = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.button3 = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.button4 = new System.Windows.Forms.Button(); + this.tbDelay = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); this.book_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.author = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.book_comp = new System.Windows.Forms.DataGridViewTextBoxColumn(); @@ -46,19 +63,8 @@ namespace ISBN_Check_test this.sold_out = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.count = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.label1 = new System.Windows.Forms.Label(); - this.richTextBox1 = new System.Windows.Forms.RichTextBox(); - this.start_idx = new System.Windows.Forms.TextBox(); - this.end_idx = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.button2 = new System.Windows.Forms.Button(); - this.cb_api = new System.Windows.Forms.ComboBox(); - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.btn_Yes24 = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panel2 = new System.Windows.Forms.Panel(); - this.panel3 = new System.Windows.Forms.Panel(); - this.button3 = new System.Windows.Forms.Button(); + this.dvc_link = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dvc_remark = new System.Windows.Forms.DataGridViewTextBoxColumn(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); this.panel1.SuspendLayout(); this.panel2.SuspendLayout(); @@ -77,7 +83,7 @@ namespace ISBN_Check_test // // button1 // - this.button1.Location = new System.Drawing.Point(388, 9); + this.button1.Location = new System.Drawing.Point(530, 11); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 2; @@ -87,14 +93,14 @@ namespace ISBN_Check_test // // dataGridView1 // - dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle7.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); - dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.book_name, this.author, @@ -106,28 +112,203 @@ namespace ISBN_Check_test this.category, this.sold_out, this.Column1, - this.count}); + this.count, + this.dvc_link, + this.dvc_remark}); this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnF2; this.dataGridView1.Location = new System.Drawing.Point(0, 0); this.dataGridView1.Name = "dataGridView1"; - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle9.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); - dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle9; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; this.dataGridView1.RowTemplate.Height = 23; this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; - this.dataGridView1.Size = new System.Drawing.Size(1001, 471); + this.dataGridView1.Size = new System.Drawing.Size(1309, 471); this.dataGridView1.TabIndex = 3; this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick); this.dataGridView1.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick); this.dataGridView1.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dataGridView1_RowPostPaint); this.dataGridView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView1_KeyDown); // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(1046, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 4; + this.label1.Text = "00:00:00.00"; + this.label1.Click += new System.EventHandler(this.label1_Click); + // + // richTextBox1 + // + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(1309, 100); + this.richTextBox1.TabIndex = 5; + this.richTextBox1.Text = ""; + // + // start_idx + // + this.start_idx.Location = new System.Drawing.Point(272, 11); + this.start_idx.Name = "start_idx"; + this.start_idx.Size = new System.Drawing.Size(42, 21); + this.start_idx.TabIndex = 6; + this.start_idx.Text = "1"; + this.start_idx.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress); + // + // end_idx + // + this.end_idx.Location = new System.Drawing.Point(340, 11); + this.end_idx.Name = "end_idx"; + this.end_idx.Size = new System.Drawing.Size(42, 21); + this.end_idx.TabIndex = 6; + this.end_idx.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(320, 15); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(14, 12); + this.label2.TabIndex = 4; + this.label2.Text = "~"; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(609, 11); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 2; + this.button2.Text = "리 셋"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // cb_api + // + this.cb_api.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cb_api.FormattingEnabled = true; + this.cb_api.Location = new System.Drawing.Point(12, 10); + this.cb_api.Name = "cb_api"; + this.cb_api.Size = new System.Drawing.Size(121, 20); + this.cb_api.TabIndex = 0; + this.cb_api.SelectedIndexChanged += new System.EventHandler(this.cb_api_SelectedIndexChanged); + // + // progressBar1 + // + this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar1.Location = new System.Drawing.Point(1113, 10); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(184, 23); + this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous; + this.progressBar1.TabIndex = 7; + // + // btn_Yes24 + // + this.btn_Yes24.Location = new System.Drawing.Point(767, 11); + this.btn_Yes24.Name = "btn_Yes24"; + this.btn_Yes24.Size = new System.Drawing.Size(75, 23); + this.btn_Yes24.TabIndex = 8; + this.btn_Yes24.Text = "Yes반출"; + this.btn_Yes24.UseVisualStyleBackColor = true; + this.btn_Yes24.Click += new System.EventHandler(this.btn_Yes24_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.label4); + this.panel1.Controls.Add(this.tbDelay); + this.panel1.Controls.Add(this.label3); + this.panel1.Controls.Add(this.button4); + this.panel1.Controls.Add(this.button3); + this.panel1.Controls.Add(this.cb_api); + this.panel1.Controls.Add(this.btn_Yes24); + this.panel1.Controls.Add(this.cb_filter); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.button1); + this.panel1.Controls.Add(this.progressBar1); + this.panel1.Controls.Add(this.button2); + this.panel1.Controls.Add(this.end_idx); + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.start_idx); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(1309, 47); + this.panel1.TabIndex = 9; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(688, 11); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 9; + this.button3.Text = "리셋(전체)"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // panel2 + // + this.panel2.Controls.Add(this.richTextBox1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel2.Location = new System.Drawing.Point(0, 518); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1309, 100); + this.panel2.TabIndex = 10; + // + // panel3 + // + this.panel3.Controls.Add(this.dataGridView1); + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(0, 47); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(1309, 471); + this.panel3.TabIndex = 11; + // + // button4 + // + this.button4.Location = new System.Drawing.Point(848, 11); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 10; + this.button4.Text = "목록초기화"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // tbDelay + // + this.tbDelay.Location = new System.Drawing.Point(454, 12); + this.tbDelay.Name = "tbDelay"; + this.tbDelay.Size = new System.Drawing.Size(42, 21); + this.tbDelay.TabIndex = 12; + this.tbDelay.Text = "500"; + this.tbDelay.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(398, 17); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(53, 12); + this.label3.TabIndex = 11; + this.label3.Text = "지연시간"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(502, 17); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(23, 12); + this.label4.TabIndex = 13; + this.label4.Text = "ms"; + // // book_name // this.book_name.HeaderText = "도서명"; @@ -187,147 +368,27 @@ namespace ISBN_Check_test // // count // - dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.count.DefaultCellStyle = dataGridViewCellStyle8; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.count.DefaultCellStyle = dataGridViewCellStyle2; this.count.HeaderText = "검색갯수"; this.count.Name = "count"; this.count.Width = 80; // - // label1 + // dvc_link // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(719, 16); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(65, 12); - this.label1.TabIndex = 4; - this.label1.Text = "00:00:00.00"; - this.label1.Click += new System.EventHandler(this.label1_Click); + this.dvc_link.HeaderText = "URL"; + this.dvc_link.Name = "dvc_link"; // - // richTextBox1 + // dvc_remark // - this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.richTextBox1.Location = new System.Drawing.Point(0, 0); - this.richTextBox1.Name = "richTextBox1"; - this.richTextBox1.Size = new System.Drawing.Size(1001, 100); - this.richTextBox1.TabIndex = 5; - this.richTextBox1.Text = ""; - // - // start_idx - // - this.start_idx.Location = new System.Drawing.Point(272, 11); - this.start_idx.Name = "start_idx"; - this.start_idx.Size = new System.Drawing.Size(42, 21); - this.start_idx.TabIndex = 6; - this.start_idx.Text = "1"; - this.start_idx.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress); - // - // end_idx - // - this.end_idx.Location = new System.Drawing.Point(340, 11); - this.end_idx.Name = "end_idx"; - this.end_idx.Size = new System.Drawing.Size(42, 21); - this.end_idx.TabIndex = 6; - this.end_idx.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(320, 15); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(14, 12); - this.label2.TabIndex = 4; - this.label2.Text = "~"; - // - // button2 - // - this.button2.Location = new System.Drawing.Point(467, 9); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 2; - this.button2.Text = "리 셋"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // cb_api - // - this.cb_api.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cb_api.FormattingEnabled = true; - this.cb_api.Location = new System.Drawing.Point(12, 10); - this.cb_api.Name = "cb_api"; - this.cb_api.Size = new System.Drawing.Size(121, 20); - this.cb_api.TabIndex = 0; - this.cb_api.SelectedIndexChanged += new System.EventHandler(this.cb_api_SelectedIndexChanged); - // - // progressBar1 - // - this.progressBar1.Location = new System.Drawing.Point(786, 10); - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(184, 23); - this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous; - this.progressBar1.TabIndex = 7; - // - // btn_Yes24 - // - this.btn_Yes24.Location = new System.Drawing.Point(625, 9); - this.btn_Yes24.Name = "btn_Yes24"; - this.btn_Yes24.Size = new System.Drawing.Size(75, 23); - this.btn_Yes24.TabIndex = 8; - this.btn_Yes24.Text = "Yes반출"; - this.btn_Yes24.UseVisualStyleBackColor = true; - this.btn_Yes24.Click += new System.EventHandler(this.btn_Yes24_Click); - // - // panel1 - // - this.panel1.Controls.Add(this.button3); - this.panel1.Controls.Add(this.cb_api); - this.panel1.Controls.Add(this.btn_Yes24); - this.panel1.Controls.Add(this.cb_filter); - this.panel1.Controls.Add(this.label1); - this.panel1.Controls.Add(this.button1); - this.panel1.Controls.Add(this.progressBar1); - this.panel1.Controls.Add(this.button2); - this.panel1.Controls.Add(this.end_idx); - this.panel1.Controls.Add(this.label2); - this.panel1.Controls.Add(this.start_idx); - this.panel1.Dock = System.Windows.Forms.DockStyle.Top; - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(1001, 47); - this.panel1.TabIndex = 9; - // - // panel2 - // - this.panel2.Controls.Add(this.richTextBox1); - this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel2.Location = new System.Drawing.Point(0, 518); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(1001, 100); - this.panel2.TabIndex = 10; - // - // panel3 - // - this.panel3.Controls.Add(this.dataGridView1); - this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel3.Location = new System.Drawing.Point(0, 47); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(1001, 471); - this.panel3.TabIndex = 11; - // - // button3 - // - this.button3.Location = new System.Drawing.Point(546, 9); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 9; - this.button3.Text = "리셋(전체)"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); + this.dvc_remark.HeaderText = "비고"; + this.dvc_remark.Name = "dvc_remark"; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1001, 618); + this.ClientSize = new System.Drawing.Size(1309, 618); this.Controls.Add(this.panel3); this.Controls.Add(this.panel2); this.Controls.Add(this.panel1); @@ -358,6 +419,14 @@ namespace ISBN_Check_test private System.Windows.Forms.ComboBox cb_api; private System.Windows.Forms.ProgressBar progressBar1; private System.Windows.Forms.Button btn_Yes24; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox tbDelay; + private System.Windows.Forms.Label label3; private System.Windows.Forms.DataGridViewTextBoxColumn book_name; private System.Windows.Forms.DataGridViewTextBoxColumn author; private System.Windows.Forms.DataGridViewTextBoxColumn book_comp; @@ -369,10 +438,8 @@ namespace ISBN_Check_test private System.Windows.Forms.DataGridViewTextBoxColumn sold_out; private System.Windows.Forms.DataGridViewTextBoxColumn Column1; private System.Windows.Forms.DataGridViewTextBoxColumn count; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.Button button3; + private System.Windows.Forms.DataGridViewTextBoxColumn dvc_link; + private System.Windows.Forms.DataGridViewTextBoxColumn dvc_remark; } } diff --git a/ISBN_Check/Main/Form1.cs b/ISBN_Check/Main/Form1.cs index 6faaefc..1192d4d 100644 --- a/ISBN_Check/Main/Form1.cs +++ b/ISBN_Check/Main/Form1.cs @@ -11,6 +11,8 @@ using System.Threading; using System.Windows.Forms; using WindowsFormsApp1; using System.Text.RegularExpressions; +using System.Diagnostics.Eventing.Reader; +using Org.BouncyCastle.Pkcs; namespace ISBN_Check_test { @@ -25,8 +27,15 @@ namespace ISBN_Check_test } private void Form1_Load(object sender, EventArgs e) { + this.Show(); + Application.DoEvents(); string[] api_list = { "다음", "네이버", "알라딘" }; cb_api.Items.AddRange(api_list); + cb_api.SelectedIndex = 2; + Application.DoEvents(); + cb_filter_SelectedIndexChanged(null, null); + Application.DoEvents(); + } private void button2_Click(object sender, EventArgs e) { @@ -45,8 +54,16 @@ namespace ISBN_Check_test if (cb_api.SelectedIndex == -1) { MessageBox.Show("조건이 선택되지 않았습니다."); return; } if (cb_filter.SelectedIndex == -1) { MessageBox.Show("조건이 선택되지 않았습니다."); return; } + this.dataGridView1.AutoResizeColumn(3); + this.Refresh(); + Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); + if (int.TryParse(tbDelay.Text, out int delayms) == false) + { + MessageBox.Show("지연시간 입력 오류"); + return; + } var sistr = start_idx.Text.Trim(); var eistr = end_idx.Text.Trim(); @@ -69,7 +86,7 @@ namespace ISBN_Check_test ei = ei - 1; si = si - 1; - if(si < 0 || ei <0) + if (si < 0 || ei < 0) { MessageBox.Show("시작,종료번호를 확인하세요"); return; @@ -97,7 +114,7 @@ namespace ISBN_Check_test Naver_API(dataGridView1, si, ei); break; case 2: - Aladin_API(dataGridView1, si, ei); + Aladin_API(dataGridView1, si, ei, delayms); break; } @@ -119,7 +136,7 @@ namespace ISBN_Check_test /// 알라딘 API /// /// - private void Aladin_API(DataGridView gridview, int start, int end) + private void Aladin_API(DataGridView gridview, int start, int end, int delayms) { // 도서명 / 저자 / 출판사 / isbn / 정가 // 발행일 / 도서분류 / 재고 @@ -152,25 +169,32 @@ namespace ISBN_Check_test break; } // string query = dataGridView1.Rows[a].Cells["isbn"].Value?.ToString() ?? string.Empty; - string query = Set_query(type, a ); //a=는줄번호이고 idx는 -1 해야함 + 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; + else if (gridview.Rows[a].DefaultCellStyle.BackColor == Color.LightGray) + gridview.Rows[a].DefaultCellStyle.BackColor = Color.Empty; // string aladin = api.Aladin(query, "ISBN13", param); - var aladin = api.Aladin(query, type, param); - insert_By_Aladin(aladin, a); - try - { - var sb = new StringBuilder(); - foreach(var item in aladin) - { - sb.AppendLine(string.Join("|", item)); - } - richTextBox1.Text = sb.ToString(); - } - catch { } + //var aladin = api.Aladin(query, type, param); + var aladin_struct = api.Aladin_struct(query, type, out string xmlString); + insert_By_Aladin(aladin_struct, a, xmlString); + if (aladin_struct.Any()) + richTextBox1.Text = aladin_struct.First().ToString(); + else + richTextBox1.Text = "No Data"; + + System.Threading.Thread.Sleep(delayms); + //try + //{ + // var sb = new StringBuilder(); + // foreach (var item in aladin) + // { + // sb.AppendLine(string.Join("|", item)); + // } + // richTextBox1.Text = aladin_struct.ToString();// sb.ToString(); + //} + //catch { } } } string Set_query(string type, int idx) @@ -314,13 +338,60 @@ namespace ISBN_Check_test { progressBar1.PerformStep(); } - void insert_By_Aladin(string[] insert, int row) + + void insert_By_Aladin(List insert, int row, string xmlString) { - if (row >0) + if (row > 0) { dataGridView1.Rows[row - 1].Selected = false; } - dataGridView1.Rows[row ].Selected = true; + dataGridView1.Rows[row].Selected = true; + + //데이터가 없다면 처리하지 않는다. + if (insert.Any() == false) + { + dataGridView1.Rows[row].Cells["count"].Value = "0"; + dataGridView1.Rows[row].Cells["dvc_remark"].Value = $"No Data\n{xmlString}"; + return; + } + + var item = insert.First(); + + // pubDate형 보기편하게 DateTime형으로 재정리 + string pubdate = item.PubDate; + try + { + //pubdate = item.PubDate; + pubdate = String.Format("{0:yyyy/MM/dd}", + DateTime.Parse(pubdate.Remove(pubdate.IndexOf(" G")))); + } + catch (Exception ex) { MessageBox.Show(item.ToString()); } + + //카테고리명 정리 + item.CategoryName = Aladin_CategorySort(item.CategoryName); + //for (int a = 0; a < insert.Length; a++) + //{ + // if (a % 8 == 6) { insert[a] = Aladin_CategorySort(insert[a]); } + //} + + dataGridView1.Rows[row].Cells["Column1"].Value += item.ToString();// string.Join("|", insert) + "|"; + if (item.Description.StartsWith("<")) item.Description = item.Description.Substring(item.Description.IndexOf(">")+1); + dataGridView1.Rows[row].Cells["dvc_remark"].Value = item.Description;// $"{insert.Count}건"; + dataGridView1.Rows[row].Cells["dvc_link"].Value = $"{item.Link}"; + dataGridView1.Rows[row].Cells["count"].Value = $"{insert.Count}"; + dataGridView1.Rows[row].DefaultCellStyle.BackColor = Color.LightGray; + if (cb_filter.SelectedItem.ToString() == "별치조사") + input_api_aladin(item, row, pubdate); + + input_api(item, row, pubdate); + } + void insert_By_Aladin(string[] insert, int row) + { + if (row > 0) + { + dataGridView1.Rows[row - 1].Selected = false; + } + dataGridView1.Rows[row].Selected = true; if (insert.Any() == false) { return; } @@ -332,7 +403,7 @@ namespace ISBN_Check_test newstring = String.Format("{0:yyyy/MM/dd}", DateTime.Parse(insert[5].Remove(insert[5].IndexOf(" G")))); } - catch (Exception ex) { MessageBox.Show(string.Join("|",insert)); } + catch (Exception ex) { MessageBox.Show(string.Join("|", insert)); } for (int a = 0; a < insert.Length; a++) { @@ -357,6 +428,17 @@ namespace ISBN_Check_test return insert; } + + void input_api_aladin(AladinBookData data, int row, string date) + { + dataGridView1.Rows[row].Cells["book_name"].Value = data.Title; + dataGridView1.Rows[row].Cells["author"].Value = data.Author; + dataGridView1.Rows[row].Cells["book_comp"].Value = data.Publisher; + dataGridView1.Rows[row].Cells["price2"].Value = data.PriceStandard; + dataGridView1.Rows[row].Cells["pubDate"].Value = date; + dataGridView1.Rows[row].Cells["category"].Value = data.CategoryName; + } + void input_api_aladin(string[] data, int row, string date) { dataGridView1.Rows[row].Cells["book_name"].Value = data[0]; @@ -368,7 +450,7 @@ namespace ISBN_Check_test } void insert_By_Naver(string value, int row) { - if (row > 0) { dataGridView1.Rows[row -1].Selected = false; } + if (row > 0) { dataGridView1.Rows[row - 1].Selected = false; } dataGridView1.Rows[row].Selected = true; if (value == "") return; @@ -479,6 +561,46 @@ namespace ISBN_Check_test input_api(grid, row, newstring); } + + void input_api(AladinBookData value, int idx, string date) + { + + //string[] param = { "title", "authors", "publisher", "isbn", "price", + // "datetime", "status" }; + //string[] param = { "title", "author", "publisher", "isbn13", "priceStandard", + // "pubDate", "categoryName", "stockStatus", }; + + 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.Title == book_name) chk[0] = true; + + if (value.Author.Contains(author) == true) chk[1] = true; + else if (author.Contains(value.Author) == true) chk[1] = true; + else if (value.Author == author) chk[1] = true; + + if (value.Publisher.Contains(book_comp) == true) chk[2] = true; + else if (book_comp.Contains(value.Publisher) == true) chk[2] = true; + else if (value.Publisher == book_comp) chk[2] = true; + + if (chk[0] == true && chk[1] == true && chk[2] == true) + { + + dataGridView1.Rows[idx].Cells["isbn"].Value = value.Isbn13; + dataGridView1.Rows[idx].Cells["price2"].Value = value.PriceStandard; + dataGridView1.Rows[idx].Cells["pubDate"].Value = date; + //if (cb_api.SelectedIndex == 2) + dataGridView1.Rows[idx].Cells["category"].Value = value.CategoryName; + dataGridView1.Rows[idx].Cells["sold_out"].Value = value.StockStatus; + dataGridView1.Rows[idx].DefaultCellStyle.BackColor = Color.Yellow; + } + count_res(); + } + + /// /// API에서 가져온 데이터가 요구한 데이터와 일치하는지 알아보는 함수 /// @@ -519,15 +641,15 @@ namespace ISBN_Check_test #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(); - } + //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) @@ -574,12 +696,49 @@ namespace ISBN_Check_test } 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(); + if (e.RowIndex < 0 || e.ColumnIndex < 0) return; + var column = this.dataGridView1.Columns[e.ColumnIndex]; + + if (column.Name.Equals("dvc_remark")) + { + var value = this.dataGridView1.Rows[e.RowIndex].Cells[column.Name].Value?.ToString() ?? string.Empty; + if(value.StartsWith("<")) + { + value = value.Substring(value.IndexOf(">") + 1); + } + else this.richTextBox1.Text = value; + } + else if (column.Name.Equals("Column")) + { + var value = this.dataGridView1.Rows[e.RowIndex].Cells[column.Name].Value?.ToString() ?? string.Empty; + if (value == string.Empty) return; + + Form2 f2 = new Form2(this); + f2.row = rowidx; + f2.Call_API = cb_api.Text; + f2.Show(); + } + else if (column.Name.Equals("dvc_link")) + { + var value = this.dataGridView1.Rows[e.RowIndex].Cells[column.Name].Value?.ToString() ?? string.Empty; + if (value == string.Empty) return; + try + { + var prc = new System.Diagnostics.Process(); + prc.StartInfo = new System.Diagnostics.ProcessStartInfo() + { + FileName = value, + UseShellExecute = true + }; + prc.Start(); + } + catch (Exception ex) + { + + } + } + + } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) @@ -606,6 +765,7 @@ namespace ISBN_Check_test { string[] aladin = { "도서명 + 저자", "도서명", "저자", "출판사", "별치조사" }; cb_filter.Items.AddRange(aladin); + cb_filter.SelectedIndex = cb_filter.Items.Count - 1; } Must_Col(cb_api.SelectedIndex); } @@ -675,5 +835,10 @@ namespace ISBN_Check_test } } } + + private void button4_Click(object sender, EventArgs e) + { + dataGridView1.Rows.Clear(); + } } } diff --git a/ISBN_Check/Main/Form1.resx b/ISBN_Check/Main/Form1.resx index 72e4e0f..2f83e35 100644 --- a/ISBN_Check/Main/Form1.resx +++ b/ISBN_Check/Main/Form1.resx @@ -150,4 +150,10 @@ True + + True + + + True + \ No newline at end of file diff --git a/ISBN_Check/Main/Form1_Sub.cs b/ISBN_Check/Main/Form1_Sub.cs index d8e29c3..2be2213 100644 --- a/ISBN_Check/Main/Form1_Sub.cs +++ b/ISBN_Check/Main/Form1_Sub.cs @@ -14,6 +14,41 @@ using System.Xml.Linq; namespace ISBN_Check_test { + /// + /// 알라딘 API 응답 데이터 구조체 + /// + public class AladinBookData + { + public string Title { get; set; } + public string Link { get; set; } + public string Author { get; set; } + public string PubDate { get; set; } + public string Description { get; set; } + public string Isbn { get; set; } + public string Isbn13 { get; set; } + public string PriceSales { get; set; } + public string PriceStandard { get; set; } + public string StockStatus { get; set; } + public string Mileage { get; set; } + public string Cover { get; set; } + public string CategoryId { get; set; } + public string CategoryName { get; set; } + public string Publisher { get; set; } + public string CustomerReviewRank { get; set; } + public string FullDescription { get; set; } + public string FullDescription2 { get; set; } + public string ItemId { get; set; } + + /// + /// 지정된 필드들을 "|" 구분자로 출력 + /// + /// + public override string ToString() + { + return $"{Title}|{Author}|{Publisher}|{Isbn13}|{PriceStandard}|{PubDate}|{CategoryName}|{StockStatus}"; + } + } + class API { /// @@ -85,6 +120,92 @@ namespace ISBN_Check_test } return new string[] { }; } + + /// + /// https://blog.aladin.co.kr/openapi 참고 (구조체 반환 버전) + /// + /// + /// + /// AladinBookData 리스트 + public List Aladin_struct(string Query, string QueryType,out string xml) + { + // 쿼리 생성 + 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()); + xml = string.Empty; + try + { + // 쿼리를 입력인자로 WebRequest 개채 생성 + WebRequest request = WebRequest.Create(query); + + // WebResponse개체를 통해 서비스 요청. + WebResponse response = request.GetResponse(); + + // 결과문자열 확인 + Stream stream = response.GetResponseStream(); + StreamReader reader = new StreamReader(stream, Encoding.UTF8); + xml = reader.ReadToEnd(); + stream.Close(); + + var xdoc = XDocument.Parse(xml); + + // 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"); + + List resultList = new List(); + + if (!itemElements.Any()) + { + Console.WriteLine(Query); + return resultList; + } + + // 모든 item을 순회하며 리스트에 추가 + foreach (var itemElement in itemElements) + { + AladinBookData bookData = new AladinBookData + { + ItemId = itemElement.Attribute("itemId")?.Value ?? "", + Title = itemElement.Element(ns + "title")?.Value ?? "", + Link = itemElement.Element(ns + "link")?.Value ?? "", + Author = itemElement.Element(ns + "author")?.Value ?? "", + PubDate = itemElement.Element(ns + "pubDate")?.Value ?? "", + Description = itemElement.Element(ns + "description")?.Value ?? "", + Isbn = itemElement.Element(ns + "isbn")?.Value ?? "", + Isbn13 = itemElement.Element(ns + "isbn13")?.Value ?? "", + PriceSales = itemElement.Element(ns + "priceSales")?.Value ?? "", + PriceStandard = itemElement.Element(ns + "priceStandard")?.Value ?? "", + StockStatus = itemElement.Element(ns + "stockStatus")?.Value ?? "", + Mileage = itemElement.Element(ns + "mileage")?.Value ?? "", + Cover = itemElement.Element(ns + "cover")?.Value ?? "", + CategoryId = itemElement.Element(ns + "categoryId")?.Value ?? "", + CategoryName = itemElement.Element(ns + "categoryName")?.Value ?? "", + Publisher = itemElement.Element(ns + "publisher")?.Value ?? "", + CustomerReviewRank = itemElement.Element(ns + "customerReviewRank")?.Value ?? "", + FullDescription = itemElement.Element(ns + "fulldescription")?.Value ?? "", + FullDescription2 = itemElement.Element(ns + "fulldescription2")?.Value ?? "" + }; + + resultList.Add(bookData); + } + + return resultList; + } + catch (Exception ex) + { + // 에러 발생 시 빈 리스트 반환 + return new List(); + } + } + /// /// https://blog.aladin.co.kr/openapi 참고 /// diff --git a/ISBN_Check/Main/Properties/AssemblyInfo.cs b/ISBN_Check/Main/Properties/AssemblyInfo.cs index d2ceb84..387ea21 100644 --- a/ISBN_Check/Main/Properties/AssemblyInfo.cs +++ b/ISBN_Check/Main/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ using System.Runtime.InteropServices; // // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 // 기본값으로 할 수 있습니다. -[assembly: AssemblyVersion("25.09.24.2340")] +[assembly: AssemblyVersion("25.10.29.2300")] // [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("25.09.24.2340")] +[assembly: AssemblyFileVersion("25.10.29.2300")]