Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert sind; Die von diesem Forum gesetzten Cookies düfen nur auf dieser Website verwendet werden und stellen kein Sicherheitsrisiko dar. Cookies auf diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.
Hallo, Gast! (Registrieren)
01.05.2024, 10:09



Auslesen und splitten von Strings verschnellern?
#1
27.12.2012
Flying-Claw Offline
Royal Guard
*


Beiträge: 3.339
Registriert seit: 12. Jul 2012

Auslesen und splitten von Strings verschnellern?
Guten Abend!

Wie kann man auslesen von Quellcode einer Internet-Seite, Splitten von Strings, und all das Zeugs verschnellern?
Ich habe ein kleines Programm geschrieben, welches Deviantart Links konvertiert, allerdings dauert das berechnen pro Bild fast bis zu 5Sekunden.. -.-
Quellcode:
Bitte nicht für den Code hauen, ich weiß selbst dass es schlecht geschrieben ist RD laugh Und ist wie gesagt nur ein Test FS grins
Spoiler (Öffnen)

Ich versteh einfach nicht, wieso es solange dauert...

MfG

Konverter funktioniert derzeitig nicht, da es den Hoster ohost.de nicht mehr gibt. Falls jemand eine alternative hätte, würde ich mich über eine PN freuen!
[Bild: flyingclaw.jpg]
(Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2013 von Flying-Claw.)
Zitieren
#2
20.01.2013
Jaco Offline
Silly Filly
*


Beiträge: 61
Registriert seit: 24. Dez 2012

RE: Auslesen und splitten von Strings verschnellern?
Bist du bisher alleine weiter gekommen?
Ansonsten schau ich mir das morgen mal an und versuche dir zu helfen, sofern ich da überhaupt ne Hilfe bin RD salute
Zitieren
#3
21.01.2013
Flying-Claw Offline
Royal Guard
*


Beiträge: 3.339
Registriert seit: 12. Jul 2012

RE: Auslesen und splitten von Strings verschnellern?
Joa, habe es jetzt um zirka 99% verschnellert - Ist aber irgendwie immer noch sehr lahm RD laugh (4-5 Sek pro Link Twilight: No, Really? ) Liegt aber wahrscheinlich an meiner Internet-Verbindung, keine Ahnung wieso. Bzw, der Code da oben trifft schon lange nicht mehr zu ^^ Kann danach ja den richtigen posten.

Konverter funktioniert derzeitig nicht, da es den Hoster ohost.de nicht mehr gibt. Falls jemand eine alternative hätte, würde ich mich über eine PN freuen!
[Bild: flyingclaw.jpg]
Zitieren
#4
21.01.2013
Saij Abwesend
Draconequus
*


Beiträge: 6.643
Registriert seit: 15. Nov 2011

RE: Auslesen und splitten von Strings verschnellern?
Ich würde statt einem Split das ganze mal mit Regular Expressions versuchen.

Code:
/_by_(.*?)-(.*?)\./

In Capture Group 1 ist der Autor und in Capture Group 2 die ID des Bildes.

Geb keine Garantie das der Regexp so funktioniert. Hab ihn eben ausm Kopf raus geschrieben.
Auf alle Fälle sollte die Rechenzeit damit um einiges schneller geworden sein.

Kann nachher gerne auch mal versuchen das ganze in Perl abzubilden (Kann kein Java so direkt Twilight happy) oder auch in PHP.
Zitieren
#5
21.01.2013
L Offline
Pepsikatze
*


Beiträge: 3.783
Registriert seit: 11. Feb 2012

lal
Deadend

[Bild: ezgif2413027430fvume.gif]
(Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2017 von L.)
Zitieren
#6
21.01.2013
Saij Abwesend
Draconequus
*


Beiträge: 6.643
Registriert seit: 15. Nov 2011

RE: Auslesen und splitten von Strings verschnellern?
Soweit ich gesehen habe gibt es in diesem Programm keinen Webrequest Twilight happy
Es nimmt nur eine Liste von URLs zu DeviantArt entgegen und nimmt diese auseinander.

Das es C# ist kann auch gut sein Twilight happy Deswegen ließ sich das Ding mit Java net kompilieren Twilight happy
Also gleich mal die Express runterladen (weil C# kann ich Twilight happy)
Zitieren
#7
21.01.2013
L Offline
Pepsikatze
*


Beiträge: 3.783
Registriert seit: 11. Feb 2012

lal
Deadend

[Bild: ezgif2413027430fvume.gif]
(Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2017 von L.)
Zitieren
#8
21.01.2013
Saij Abwesend
Draconequus
*


Beiträge: 6.643
Registriert seit: 15. Nov 2011

RE: Auslesen und splitten von Strings verschnellern?
URLs
Pro URL eine Zeile
Und sobald man convert eingibt gehts los.
Zitieren
#9
21.01.2013
L Offline
Pepsikatze
*


Beiträge: 3.783
Registriert seit: 11. Feb 2012

lal
Deadend

[Bild: ezgif2413027430fvume.gif]
(Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2017 von L.)
Zitieren
#10
21.01.2013
Saij Abwesend
Draconequus
*


Beiträge: 6.643
Registriert seit: 15. Nov 2011

RE: Auslesen und splitten von Strings verschnellern?
Lazy du hast es fast erfasst Twilight happy
Statt HTML Quellcode läuft aber da nur eine URL rein Twilight happy
Zitieren
#11
21.01.2013
Saij Abwesend
Draconequus
*


Beiträge: 6.643
Registriert seit: 15. Nov 2011

RE: Auslesen und splitten von Strings verschnellern?
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Collections;
using System.Net;
using System.IO;

namespace DeviantLinker
{
    class Program
    {
        protected List<string> _urlList = new List<string>();

        static void Main(string[] args)
        {
            Program self = new Program();
            self.run();
        }

        public void run()
        {
            while (this._printMenu() != 0)
            {
                Console.WriteLine("Processing URLs...");
                Console.WriteLine("");

                foreach (string url in this._urlList)
                {
                    this._processUrl(url);
                }

                this._urlList.Clear();

                Console.WriteLine("");
                Console.WriteLine("");
            }

            Console.WriteLine("Exiting");
        }

        protected bool _isUrl(string url)
        {
            Uri result;
            Regex regexpDeviantCheck = new Regex("\\.deviantart\\.net", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            
            if (Uri.TryCreate(url, UriKind.Absolute, out result))
            {
                return regexpDeviantCheck.IsMatch(url);
            }

            return false;
        }

        protected string _getTitle(string url)
        {
            byte[] buf = new byte[8192];
            string siteCode = "";
            WebRequest request = WebRequest.Create(url);
            WebResponse response = request.GetResponse();
            Stream resStream = response.GetResponseStream();
            Regex regexObj = new Regex("<title>(.*) by (.*?)</title>", RegexOptions.Compiled | RegexOptions.IgnoreCase);

            string tempString = null;
            int count = 0;

            do
            {
                count = resStream.Read(buf, 0, buf.Length);

                if (count != 0)
                {
                    tempString = Encoding.ASCII.GetString(buf, 0, count);
                    siteCode += tempString;

                    if (regexObj.IsMatch(siteCode))
                    {
                        return regexObj.Match(siteCode).Groups[1].Value;
                    }
                }
            }
            while (count > 0);

            return "";
        }

        protected void _processUrl(string url)
        {
            Regex regexObj = new Regex(@"http://(.*)/(.*?)_by_(.*?)-(.*?)\.(.*)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            Match matches = regexObj.Match(url);

            string autor = matches.Groups[3].Value;
            string id = matches.Groups[4].Value;
            string link = "http://fav.me/" + id;

            string code = "[spoiler=" + this._getTitle(link) + "]\n";
            code += "[img]" + url + "[/img]\n";
            code += "[url=" + link + "]Source[/url]\n";
            code += "By [url=http://" + autor + ".deviantart.com]" + autor + "[/url]\n";
            code += "[/spoiler]";

            Console.WriteLine(code);

            // Sleep a second cause we won't get locked out of deviantart
            System.Threading.Thread.Sleep(1000);
        }

        protected int _printMenu()
        {
            string input;

            Console.WriteLine("DeviantArt URL to Bronies.de Converter");
            Console.WriteLine("======================================");
            Console.WriteLine("");
            Console.WriteLine("Enter a valid DeviantArt URL or any of the following numbers.");
            Console.WriteLine("(1) Convert the given URLs to Bronies.de BBCode");
            Console.WriteLine("(2) Clear the already given URLs");
            Console.WriteLine("(X) Exit the program");

            while (true)
            {
                Console.WriteLine("->");
                input = Console.ReadLine();

                // Exit the program
                if (input.Equals("x", StringComparison.OrdinalIgnoreCase))
                {
                    return 0;
                }
                
                // Convert the URLs
                if (input.Equals("1", StringComparison.OrdinalIgnoreCase))
                {
                    return 1;
                }

                // Clear the list
                if (input.Equals("2", StringComparison.OrdinalIgnoreCase))
                {
                    this._urlList.Clear();
                }

                // This must be an URL
                if (input.Length > 0)
                {
                    if (this._isUrl(input))
                    {
                        this._urlList.Add(input);
                        Console.WriteLine("OK");
                    }
                    else
                    {
                        Console.WriteLine("Not an URL!");
                    }
                }
            }
        }
    }
}

Das ganze mal in C# mit Regular Expressions gebaut.

Btw sorry Lazy, in dem Code ist doch ein WebRequest drinne. Nämlich da wo der Titel geholt wird.
Deswegen wird man es nie unter 5 Sekunden pro URL bekommen können. DeviantArt braucht da schon ne Weile um nen Response zu schicken. Und die Sekunde Pause nach dem Verarbeiten der URL sollte man auch drinne haben damit man keinen Flood fährt.

Soviel dazu Twilight happy
Gruß
Saij
Zitieren
#12
21.01.2013
Flying-Claw Offline
Royal Guard
*


Beiträge: 3.339
Registriert seit: 12. Jul 2012

RE: Auslesen und splitten von Strings verschnellern?
(Hab nur die ersten 2-3 Beiträge nachher gelesen, also bitte nicht hauen falls etwas dazwischen gekommen ist Tongue)

Der Quellcode ist schon längst veraltet Tongue Der richtige kommt wie gesagt wenn ich am PC bin; Denn den ich da oben gepostet hatte war nur ein 5Minuten-Test. Auch an dem "richtigem" Code habe ich nicht lange gearbeitet, dazu fehlt mir die Zeit, aber er ist doch etwas ausgereifter als dieser hier.

Konverter funktioniert derzeitig nicht, da es den Hoster ohost.de nicht mehr gibt. Falls jemand eine alternative hätte, würde ich mich über eine PN freuen!
[Bild: flyingclaw.jpg]
(Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2013 von Flying-Claw.)
Zitieren
#13
21.01.2013
Jaco Offline
Silly Filly
*


Beiträge: 61
Registriert seit: 24. Dez 2012

RE: Auslesen und splitten von Strings verschnellern?
(21.01.2013)Lazy Dream schrieb:  Das sieht mir eher nach C# aus.

(21.01.2013)Saij schrieb:  Das es C# ist kann auch gut sein Twilight happy Deswegen ließ sich das Ding mit Java net kompilieren Twilight happy

AJ hmm, bei mir läuft es auch in Java.

Nur hab ich erstens kein Plan was er jetzt einlesen will.
Getestet mit :
Spoiler (Öffnen)

Und das stimmt mit dem Code nicht überein!
Spoiler (Öffnen)
Schließlich erwartet er mindestens zweimal den String "_by_".
Zitieren
#14
21.01.2013
Saij Abwesend
Draconequus
*


Beiträge: 6.643
Registriert seit: 15. Nov 2011

RE: Auslesen und splitten von Strings verschnellern?
Er will die Grafik URL haben. Nicht die eigentlich URL zu der Seite.
Zitieren
#15
21.01.2013
Jaco Offline
Silly Filly
*


Beiträge: 61
Registriert seit: 24. Dez 2012

RE: Auslesen und splitten von Strings verschnellern?
(21.01.2013)Saij schrieb:  Er will die Grafik URL haben. Nicht die eigentlich URL zu der Seite.

Hab ich grade auch gemerkt Twilight: No, Really?
Twilight happy

Habs getestet und es läuft in 1,145466205 Sekunden. (3000 DSL)
Optimierung würde eben Threading bringen, aber das halt nur bei mehreren Links.
Ich schätze es liegt an deiner Internetverbindung.

[EDIT]
http://zoranphoto.deviantart.com/art/Sle...-349713697
Hier stimmt die Bild URL nicht mit seinem Muster überein.
Oder irre ich mich?
(Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2013 von Jaco.)
Zitieren
#16
21.01.2013
Flying-Claw Offline
Royal Guard
*


Beiträge: 3.339
Registriert seit: 12. Jul 2012

RE: Auslesen und splitten von Strings verschnellern?
@Jaco Du irrst nicht Twilight happy Jedoch haben alle "neueren" Bilder das richtige Format. Mit meinen jetzigem Code ist so eine URL aber auch nicht weiterhin tragisch; Ich kann entweder
- Nichts machen (Oder ne Fehlermeldung auswerfen)
- Oder mein Programm so umstellen, dass es nicht den BildLink sondern den "Deviation" Link erfordert. Also den Link, der mit dem altem Code aus der URL ausgelesen wurde. Wie gesagt war das oben nur ein Test Tongue Mein jetziger Versuch ist auch nicht so viel besser, und ich werde in naechster Zeit auch nicht dazu kommen weiterzuarbeiten, jedoch koennte ich den Code heute Abend, falls ich Zeit habe, posten.



Edit: Was zum.. 1,5 Sekunden ?! Dabn liegts wirklich an meiner Leitung RD laugh!

Konverter funktioniert derzeitig nicht, da es den Hoster ohost.de nicht mehr gibt. Falls jemand eine alternative hätte, würde ich mich über eine PN freuen!
[Bild: flyingclaw.jpg]
Zitieren
#17
28.01.2013
Flying-Claw Offline
Royal Guard
*


Beiträge: 3.339
Registriert seit: 12. Jul 2012

RE: Auslesen und splitten von Strings verschnellern?
Ächz.. Endlich ist es auf GitHub 'drauf Twilight: No, Really?..
*Klick mich*
Sorry für die späte Meldung, früher war ich jedoch nicht an diesem PC.

Konverter funktioniert derzeitig nicht, da es den Hoster ohost.de nicht mehr gibt. Falls jemand eine alternative hätte, würde ich mich über eine PN freuen!
[Bild: flyingclaw.jpg]
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste