Avatar billede mulbo Nybegynder
21. juli 2004 - 16:10 Der er 6 kommentarer og
1 løsning

thumgallerydownloader regex problem

når jeg så bruger programmet med fx.
tgd.exe http://hp.dk/index.html

sååh finder den ingen links til jpg filer :/
selvom der er nogle på siden :/ den bliver bare ved med at skrive "intet fundet"... kan i se nogle fejl?

/*
* Created with SharpDevelop by MulBo.
* User: MulBo
* Date: 20-07-2004
* Time: 22:35
*/

using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;


namespace DefaultNamespace
{
    class MainClass
    {
        public static string tjek_line(string tjekLine)
        {
            //int checkValue1,checkValue2,checkValue3;
            Regex checkImage = new Regex("<a[^>]+href=\"(?<imagepath>[.]*?\\.jpg)\"");
            MatchCollection mc = checkImage.Matches(tjekLine);
           
            if(mc.Count > 0)
            {
                foreach(Match m in mc)
                {
                    return "\n" + m.Value + "\n";
                }
               
            }
            return "intet fundet";
        }

        public static int tjek_httd(string picAddr)
        {
            return picAddr.IndexOf("http://");
        }
        public static void Main(string[] args)
        {
   
            string line;
            //string[] picAddr;
            string uriString = "";
           
            foreach(string arg in args)
            {
                uriString += arg;   
            }
           
            WebClient myWebClient = new WebClient();
            Console.WriteLine("Downloading html {0} ...", uriString);
            Stream myStream = myWebClient.OpenRead(uriString);
            Console.WriteLine("\nDisplaying Data..\n");
            StreamReader sr = new StreamReader(myStream);
            while((line = sr.ReadLine()) != null)
            {
                Console.Write(tjek_line(line));
            }
           
            myStream.Close();
        }
    }
}
Avatar billede arne_v Ekspert
21. juli 2004 - 17:45 #1
Følgende program:

using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

class MainClass
{
    public static void Main(string[] args)
    {
        Check("http://hp.dk/", ".gif");
        Check("http://hp.dk/", ".jpg");
        Check("http://tv2.dk/", ".gif");
        Check("http://tv2.dk/", ".jpg");
        Check("http://192.168.1.11/", ".gif");
        Check("http://192.168.1.11/", ".jpg");
    }
    public static void Check(string url, string imgtyp)
    {
        WebClient wc = new WebClient();
        StreamReader sr = new StreamReader(wc.OpenRead(url));
        string html = sr.ReadToEnd();
        if(Regex.IsMatch(html.ToLower(), "<img[ ]*src=\"[^\"]*" + imgtyp + "\""))
        {
            Console.WriteLine(url + " has " + imgtyp);
        }
        else
        {
            Console.WriteLine(url + " has not " + imgtyp);
        }
        sr.Close();
    }
}

giver følgende output:

http://hp.dk/ has .gif
http://hp.dk/ has not .jpg
http://tv2.dk/ has .gif
http://tv2.dk/ has .jpg
http://192.168.1.11/ has not .gif
http://192.168.1.11/ has not .jpg

Jeg har lavet rigtigt meget om i forhold til din kode. Ja det er faktisk
totalt omskrevet.

Men studer det og se hvad det gør.
Avatar billede mulbo Nybegynder
21. juli 2004 - 20:43 #2
Det har hjulpet meget!!!
men hvordan kan jeg få image stien ud af linjen?
har tænkt lidt på: "<a[^>]+href=\"(?<imagepath>[.]*?\\.jpg)\""
men ved ikke om den har det formål... og skal jeg ikke også bruge replace istedet for IsMatch ?

/MulBo
Avatar billede mulbo Nybegynder
21. juli 2004 - 21:07 #3
jeg er kommet frem til det her..,. men fungere ikke helt fint :(/


/*
* Created with SharpDevelop by MulBo.
* User: MulBo
* Date: 20-07-2004
* Time: 22:35
*/

using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;


namespace DefaultNamespace
{
    class MainClass
    {
        public static string check_line(string html)
        {
            string imgtyp = ".jpg";
            Regex myRegex = new Regex("<a[ ]*href=\"[^\"]*" + imgtyp + "\"");
            return myRegex.Replace(html.ToLower(), "");
           
        }

        public static int check_httd(string picAddr)
        {
            return picAddr.IndexOf("http://");
        }
        public static void Main(string[] args)
        {
   
            //string[] picAddr;
            string uriString = "";
           
            foreach(string arg in args)
            {
                uriString += arg;   
            }
           
            WebClient myWebClient = new WebClient();
            Console.WriteLine("Downloading html {0} ...", uriString);
            Stream myStream = myWebClient.OpenRead(uriString);
            Console.WriteLine("\nDisplaying Data..\n");
            StreamReader html = new StreamReader(myStream);
            Console.Write(check_line(html.ReadToEnd()));
           
            myStream.Close();
        }
    }
}
Avatar billede arne_v Ekspert
21. juli 2004 - 21:48 #4
Vil du bare erstatte linket med ingenting ?

Så er det vel bare:

public static string check_line(string html)
        {
            string imgtyp = ".jpg";
            return Regex.Replace(html, "<a[ ]*href=\"[^\"]*" + imgtyp + "\"", "");
        }
Avatar billede mulbo Nybegynder
21. juli 2004 - 22:53 #5
nej sorry jeg har formuleret mig forkert....
jeg skal return link'et...
alså hvis der fx. står i html kode:
<td>bla<a href="images/pic.jpg">spdf</a></td>
så skal den returne images/pic.jpg
Avatar billede arne_v Ekspert
22. juli 2004 - 17:15 #6
Så er det nok noget i den her stil du leder efter:

using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

class MainClass
{
    public static void Main(string[] args)
    {
        Find("http://tv2.dk/", ".gif");
    }
    public static void Find(string url, string imgtyp)
    {
        WebClient wc = new WebClient();
        StreamReader sr = new StreamReader(wc.OpenRead(url));
        string html = sr.ReadToEnd();
        MatchCollection res = Regex.Matches(html,"(?:<img[ ]*src=\")([^\"]*" + imgtyp + ")(?:\")");
        for(int i = 0; i < res.Count; i++) {
            Console.WriteLine(res[i].Groups[1]);
        }
        sr.Close();
    }
}
Avatar billede mulbo Nybegynder
22. juli 2004 - 20:49 #7
Thanks it's works :) med små justeringer :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester