Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 108,419

HOME > .NET Framework > Forum > C# WinApp/WPF โค้ดเดียวกันแต่ได้ผลออกมาไม่เหมือนกัน



 

C# WinApp/WPF โค้ดเดียวกันแต่ได้ผลออกมาไม่เหมือนกัน

 



Topic : 135536



โพสกระทู้ ( 4,067 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook



ช่วงนี้เงียบๆ จัดมาซัก 1 คำถามดีกว่า(55555)

ผมกำลังเขียนโปรแกรมโหลดไฟล์จาก ยูทูป ที่เป็น playlist อยู่ ครับ
แต่ติดปัญหาว่า

โค้ด

Code (C#)
void _Load()
        {

            Process process = new Process
            {
                StartInfo =
                {
                    FileName = Properties.Settings.Default.YoutubeDlPath,
                    Arguments = string.Format("--ignore-errors  --no-post-overwrites  --output \"{0}\" {1}", @"d:\เพชรพระอุมา ภาคสมบูรณ์ ตอนที่ 28.mp4", @"https://www.youtube.com/watch?v=uTAzQoyw6pM"),
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    UseShellExecute = false
                },
                EnableRaisingEvents = true
            };
            process.Exited += new EventHandler((object sender, EventArgs e) =>
            {
                process.Dispose();
            });
            Task.Run(() => process.Start()).Wait();

        }




แปลกตรงที่มันรันใน winapp ไม่มีอะไรเกิดขึ้น
แต่รันใน WPF กลับทำงานปกติ

และโค้ด
Code (C#)
 private void GetLink()
        {

            string strpettern = @"{""webCommandMetadata"":{""url"":""(/watch\?v=.{10,20}\.*?list=.{25,40}\.*?index=)(\d{1,})""";//@"""url"":""(/watch\?v=.*?index=)(\d{1,})""";
            Regex myRegex = new Regex(strpettern, RegexOptions.None);
          
            do
            {
                string html = TorServices.NetWorkTOR.getHTML (_url);
                foreach (Match myMatch in new Regex(strpettern, RegexOptions.None).Matches(html))
                {
                    string myMatchURL = "https://www.youtube.com" + (myMatch.Groups[1].Value + myMatch.Groups[2].Value).Replace(@"\u0026", "&");
                    if (!PlaylistAll.Contains(myMatchURL) && myMatchURL.Length < 300)
                    {
                        if (int.Parse(myMatch.Groups[2].Value) > index)
                        {
                            surl = myMatchURL;
                            index = int.Parse(myMatch.Groups[2].Value);
                        }
                        PlaylistAll += myMatchURL + "\n";
                        lblStatus.Invoke(new Action(() => lblStatus.Text = "Status:Adding>>" + myMatchURL));
                        dataGridView1.Invoke(new Action(() => dataGridView1.Rows.Add(YoutubeSearcher.GetTitletName(myMatchURL), myMatchURL, 0, PlaylistName)));//YoutubeSearcher.GetTitletName(myMatchURL)
                        i++;
                    }
                }
                if (surl != _url)
                {
                    _url = surl;
                }
            }
            while (surl != _url);

         
        }


กลับใช้งานได้ดีใน winapp ส่วน wpf ใช้ไม่ได้ คือใน wpf มันไม่ดึงค่า index=1 ออกมาเหมือนใน winapp

ไม่เข้าใจว่าเกิดจาดอะไรครับ
ทั้ง winapp และ WPF ลองสร้างใหม่หลายโปรเจคแล้วผลก็ได้เหมือนเดิม ครับ



Tag : .NET, Win (Windows App), C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2020-09-12 09:54:34 By : lamaka.tor View : 69 Reply : 9
 

 

No. 1



โพสกระทู้ ( 1,291 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ทำไมบางอย่างได้บางอย่างไม่ได้ ลองอ่านดูข้อแตกต่างครับ
https://www.bing.com/search?q=wpf+vs+winforms

ทั้ง WPF, WinForms เป็น WinApp ทั้งคู่ ซึ่งเป็นซับเซตของ Desktop Application อีกที(รวม Linux, UNIX OSes)

ยังมีอีกอันคือ UWP เป็น Cross-Platform ที่ทำให้ UI เป็น powerful ดูดี นำสมัย (แต่ช้า)
https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide

การดึงลิงค์จาก youtube ทุกวันนี้ไม่ยากเหมือนแต่ก่อน เพราะเขามี YouTube DATA API มาให้
ไม่ต้องไป Scrape เอาเหมือนแต่ก่อน (แต่เรื่องนี้เป็นความชอบเฉพาะบุคคล)

ผมขอยกตัวอย่าง ผลลัพธ์จากการใช้ Data API V3 (JS)

Youtube Playlist Exporter (Data API V3: JS)

โค้ดทั้งหมดเอามาจาก https://developers.google.com/youtube/v3/docs/playlists/list






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-12 13:43:29 By : PhrayaDev
 


 

No. 2



โพสกระทู้ ( 4,067 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 1 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-12 13:43:29
รายละเอียดของการตอบ ::
ขอบคุณมากครับ
API รอบรับ winapp ใช่ไม๊ครับ
ผมจะได้ศึกษาเพิ่มเติม ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-12 21:51:14 By : lamaka.tor
 

 

No. 3



โพสกระทู้ ( 1,291 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

API มีสำหรับ .NET โดยตรงครับ
แต่ผมแนะนำให้ใช้ JS
JS = JavaScript
เป็น Web Technology
การเรียกใช้งาน JS ใน Desktop App
พึ่งพวก Web Browser control (ของใหม่ Microsoft ก็ WebView2)
หรือ ถ้าเครื่องใช้งานไม่ได้ลง Edge
ลองถามเป็ดดูครับ

https://duckduckgo.com/?q=js+in+winform+c%23
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-12 22:44:34 By : PhrayaDev
 


 

No. 4



โพสกระทู้ ( 4,067 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 3 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-12 22:44:34
รายละเอียดของการตอบ ::
ขอบคุณอีกครั้งครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-12 23:39:18 By : lamaka.tor
 


 

No. 5



โพสกระทู้ ( 1,291 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ถ้าไม่อยากยุ่งเกี่ยวกับ JS ลองดูคลิปนี้เป็นไกด์ แล้วไปประยุกต์เอาครับ (ตัวอย่างเป็นรายชื่อวีดิโอ...ไม่ใช่ลิงค์)
https://www.youtube.com/watch?v=ffRrT38CHv8

ตัวอย่างจาก google dev
https://developers.google.com/youtube/v3/code_samples/dotnet



จากที่อ่าน doc แบบคร่าวๆ
API Key - ขอฟรี
OAuth2 - น่าจะเสียเงิน

ถ้าสนใจลองศึกษาดูครับ ได้ความรู้ใหม่ยังไง มาบอกกล่าวกันด้วย
เพราะผมยังเล่นไม่ครบเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-13 01:49:19 By : PhrayaDev
 


 

No. 6



โพสกระทู้ ( 4,067 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ไม่ทราบว่าขอคำแนะนำเรื่อง HtmlAgilityPack ได้ไม๊ครับ
เพิ่งลองหัดใช้
ไม่รู้ว่า เวลาเราจะดึงค่าออกมาต้องดึงค่ายังไง ครับ

เห็นในตัวอย่าง
https://html-agility-pack.net/online-examples

มีการดึงค่า ออกมา แต่ผมไม่ถนัด และ ไปไม่ถูกเลยครับ
คือจะดึงค่า "simpleText": และ "commandMetadata":{"webCommandMetadata":
ออกมา ซึ่งจะได้ ชื่อเพลง และ ลิงค์ ออกมาเลยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-13 22:56:37 By : lamaka.tor
 


 

No. 7



โพสกระทู้ ( 4,067 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ผมลองกลับมาใช้

Code (C#)
 private void GetLink()
        {
          this.Invoke(new Action(()=>  this.Text = "runing"));
           string strpettern = @"{""title"":{""accessibility"":{""accessibilityData"":{""label"":"".{5,600}""}},""simpleText"":""(.{5,600})""},""longBylineText"":.*?""commandMetadata"":{""webCommandMetadata"":{""url"":""(/watch\?v=.{10,30}\.*?list=.{20,50}\.*?index=)(\d{1,})"",""webPageType"":";
            Regex myRegex = new Regex(strpettern, RegexOptions.Compiled);
            string _url; int i = 1, index = 1; string surl = "", PlaylistAll= "";
            _url = @"https://www.youtube.com/watch?v=FZxobySebhk&list=PLdawj7HD1Qn64RAbw23S-ZFWzoVqtfXFB";
            //  string strpettern = @"{""webCommandMetadata"":{""url"":""(/watch\?v=.{10,20}\.*?list=.{25,40}\.*?index=)(\d{1,})""";//@"""url"":""(/watch\?v=.*?index=)(\d{1,})""";
            DateTime dt1 = DateTime.Now; 
            bool complete = false;
            do
            {
                string html = TorServices.NetWorkTOR.getHTML(_url);
                foreach (Match myMatch in new Regex(strpettern, RegexOptions.None).Matches(html))
                {
                    string myMatchURL = "https://www.youtube.com" + (myMatch.Groups[2].Value + myMatch.Groups[3].Value).Replace(@"\u0026", "&");
                    if (!PlaylistAll.Contains(myMatchURL) && myMatchURL.Length < 300)
                    {
                        if (int.Parse(myMatch.Groups[3].Value) > index)
                        {
                            surl = myMatchURL;
                            index = int.Parse(myMatch.Groups[3].Value);
                            i++;
                        }
                        PlaylistAll += myMatchURL + "\n";
                        richTextBox1.WriteLine(myMatch.Groups[1].Value + "   " + myMatchURL);
                        
                    }
                }
                if (surl == _url)
                {
                    complete = true;
                }
                else
                {
                    _url = surl;
                }
            }
            while (complete == false);



            TimeSpan span = DateTime.Now.Subtract(dt1);
            this.Invoke(new Action(() => this.Text = "time:" + span.Hours.ToString("00") + ":" + span.Minutes.ToString("00") + ":" + span.Seconds.ToString("00") + ":" + span.Milliseconds.ToString("000") + "  Total Link:" + i));



        }



จะดึง ชื่อเพลง กับ link มารอบเดียวไม่ต้องเอา link ไป ดึงชื่อเพลงมาอีกรอบ

555

เร็วจริง แต่ ต้องแก้ปัญหาที่ว่า มันดึงมาได้มั่งไม่ได้มั่ง
ไม่รู้ว่า ตอนเอา url ไป อ่านเป็น HTML มีปัญหา หรือว่า แต่ละรอบมันไม่เหมือนกันหรือปล่าว

Code (C#)
 public static string getHTML(this string url)
        {
            var html = "";

             try
              {
                  System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url.Trim());
                  System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
                  System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream());
                  html = sr.ReadToEnd();
                  sr.Close();
                  response.Close();
               }
               catch { }
            


            return html;
        }


เท่าที่ลองสังเกตดู
ตัวที่ช้า คือ getHTML ครับ
ในส่วนของ Regex ถือว่าเร็วพอสมควร
พอจะขึ้น url ใหม่ มันจะช้าซักหน่อย เดาเอาว่า ตัวรายละเอียดเว็บมันเยอะ เลยทำให้อ่านช้าหน่อยครับ

มีโค้ดอ่าน url ที่เร็วขึ้นไม๊ ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-14 00:16:22 By : lamaka.tor
 


 

No. 8



โพสกระทู้ ( 1,291 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

Quote:
ดูเรื่อง JSON โดยเฉพาะ Json.NET ครับ
https://www.newtonsoft.com/json/help/html/QueryingLINQtoJSON.htm
https://www.w3schools.com/js/js_json_intro.asp


1. โหลดหน้าด้วย WebClient
https://stackoverflow.com/questions/44897486/scrape-json-from-webpage-with-c-sharp

2. ใช้ RegEx หรือ Jurassic เพื่อจับเฉพาะ JSON String
https://html-agility-pack.net/knowledge-base/18156795/parsing-html-to-get-script-variable-value

สีเขียวคือ JSON String
window["ytInitialData"] = {"responseContext":{" ...};


3. อ้างอิงโครงสร้างนี้เพื่อเข้าถึงลิงค์และชื่อ (ใช้ Json.NET)
Youtube JSON
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-14 06:21:14 By : PhrayaDev
 


 

No. 9



โพสกระทู้ ( 4,067 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ได้ครับ เดี๋ยวจะลองสู้กับ JSON ซักตั้งดู
เลี่ยงมันมานานแล้วครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-14 08:02:07 By : lamaka.tor
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : C# WinApp/WPF โค้ดเดียวกันแต่ได้ผลออกมาไม่เหมือนกัน
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม , รับทำบัญชี , โรงงานผลิตครีม , สำนักงานบัญชี , รับจดทะเบียนบริษัท , Pangpond , รถมือสอง

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2020 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่