[ Java ] : سحب عنوان صفحة ويكيبيديا بأستعمال كلاس HttpURLConnection - و تقنية Regex

تم تحميل الصفحة في 1,8711538 ثانية
سحب عنوان صفحة ويكيبيديا بأستعمال كلاس HttpURLConnection - و تقنية Regex
إنضم
27 مايو 2014
المشاركات
293
الإعجابات
385
النقاط
63
العمر
17
الإقامة
Marruecos
السَلام عليكم ,

قمت بكتابة كلاس جافا بسيط لسحب النص من صفحة ويب و أستخراج معلومات معينة بأستعمال تقنية ال Regular Expressions ,
قمت بالتطبيق على ويكيبديا لسحب عنوان الصفحة كمثال بسيط جدا لطريقة استعمال الكلاس , بالرغم أنه سهل الأستعمال ,

الكلاس الأول الذي طرحته في موضوع سابق :

[ Java ] : - كلاس JAVA للقراءة و الكتابة على صفحة ويب - HttpURLConnection

Java:
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

/*

4w1il , oThmaN

 */


public class ConnectSource {

    private String url;
    private String method;
    private String postData = null;

    ConnectSource(String url, String method,String postData) {

        this.url = url;
        this.method = method;
        this.postData = postData;

    }

    String ReadSource() {
        String line;
        StringBuilder source = new StringBuilder();
        BufferedReader bufReader = null;
        try {
            URL sourceURL = new URL(url);
            HttpURLConnection sourceURLH = (HttpURLConnection) sourceURL.openConnection();
            if (this.method == "POST") {

                sourceURLH.setRequestMethod(this.method);
                sourceURLH.setDoOutput(true);
                sourceURLH.setInstanceFollowRedirects(false);
                sourceURLH.setRequestProperty("Content-Type" , "application/x-www-form-urlencoded");
                sourceURLH.setRequestProperty("charset","utf-8");
                sourceURLH.setRequestProperty("Content-Length",Integer.toString(this.postData.getBytes().length));
                sourceURLH.setRequestProperty("User-Agent","Hello World");

                try(DataOutputStream wr = new DataOutputStream(sourceURLH.getOutputStream())){
                    wr.write(this.postData.getBytes());
                    bufReader = new BufferedReader(new InputStreamReader(sourceURLH.getInputStream()));
                    while ((line = bufReader.readLine()) != null){
                        source.append(line + "\n");
                    }
                }
            }

            else if (this.method == "GET")
            {
                sourceURLH.setRequestProperty("User-Agent","Hello World");
                bufReader = new BufferedReader(new InputStreamReader(sourceURLH.getInputStream()));
                while ((line = bufReader.readLine()) != null) {
                    source.append(line + "\n");
                }
            }
            else {
                return "ErrorInsideMe : The Method isn't available";
            }

        } catch (IOException e) {
            return "ErrorInsideMe : " + e;
        }

        finally {

            if(bufReader != null){
                try {
                    bufReader.close();
                }
                catch (IOException e){

                }
            }
            }


        return source.toString();
    }
}
الكلاس الثاني الذي يقوم بأستخراج المعلومات من النص :

Java:
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class GetInformation {

    private String regex;
    private String htmlsource;
    private ArrayList<String> found = new ArrayList<String>();

    GetInformation(String regex,String htmlsource){
        this.regex = regex;
        this.htmlsource = htmlsource;
    }

    ArrayList<String> GetMatching(){
       Pattern p = Pattern.compile(this.regex);
        Matcher r = p.matcher(this.htmlsource);

        while (r.find()){
            found.add(r.group());
        }

    return found;
    }

}
مثال بسيط لطريقة الأستعمال :

Java:
import java.util.ArrayList;

public class MainClass {

    public static void main(String[] args){

      ConnectSource cnt = new ConnectSource("https://en.wikipedia.org/wiki/Statistical_inference","GET",null);
      String data = cnt.ReadSource();

       if(!data.contains("ErrorInsideMe")){
           GetInformation get = new GetInformation("<h1 id=\"firstHeading\" class=\"firstHeading\" lang=\"en\">\\w+\\s\\w+</h1>",data);
           ArrayList<String> found =  get.GetMatching();

           for(String word : found){
                System.out.print("Wikipedia Page Header Title : " + word.replace("<h1 id=\"firstHeading\" class=\"firstHeading\" lang=\"en\">","").replace("</h1>",""));
           }
      }

    }

}
 

Mariio

.:: مُراقب أقسام البرمجة ::.
rankrankrankrankrankrank
طاقم الإدارة
إنضم
1 مايو 2007
المشاركات
4,718
الإعجابات
4,156
النقاط
133
الإقامة
USA
وعليكم السلام

موضوع رائع اخي
خصوصا انه لم يطرح الكثير من المواضيع بخصوص Regex هنا بلديف مع انها مهمه جدا وتختصر الكثير
 
إنضم
8 سبتمبر 2013
المشاركات
7,563
الإعجابات
11,275
النقاط
168
الإقامة
JORDAN
شكراً لك على مشاركتنا اخي @4w1il
لم يطرح احد شروحات جافا مهمة مثل هذا الموضوع بأمانة لان التعامل مع نصوص شيء ليس سهل و الاهم التعامل مع موقع ولو كان بشكل بسيط ليس سهل ايضاً بالجافا
حفظت الصفحة بالمفضلة لكي انصح بها كل من يحتاجها .. اذكر اني عانيت شوية مع هذين الشيئين صراحة هههه .. جازاك الله خير

--------------
اخي @Mariio تم طرح عدة شروحات تغطي اساسيات الـRegEx من جهة الأساتذة @Qassam Sniper , @IRadical ,@Youssef13 , @»UNDeTECTeD«
...لكن منذ مدة طويلة للأسف و لا احد يبحث عن العلم هذه الفترة كله يريد شي جاهز لذلك لا تراها في صفحات متقدمة من اقسام البرمجة
 

Mariio

.:: مُراقب أقسام البرمجة ::.
rankrankrankrankrankrank
طاقم الإدارة
إنضم
1 مايو 2007
المشاركات
4,718
الإعجابات
4,156
النقاط
133
الإقامة
USA
شكراً لك على مشاركتنا اخي @4w1il
لم يطرح احد شروحات جافا مهمة مثل هذا الموضوع بأمانة لان التعامل مع نصوص شيء ليس سهل و الاهم التعامل مع موقع ولو كان بشكل بسيط ليس سهل ايضاً بالجافا
حفظت الصفحة بالمفضلة لكي انصح بها كل من يحتاجها .. اذكر اني عانيت شوية مع هذين الشيئين صراحة هههه .. جازاك الله خير

--------------
اخي @Mariio تم طرح عدة شروحات تغطي اساسيات الـRegEx من جهة الأساتذة @Qassam Sniper , @IRadical ,@Youssef13 , @»UNDeTECTeD«
...لكن منذ مدة طويلة للأسف و لا احد يبحث عن العلم هذه الفترة كله يريد شي جاهز لذلك لا تراها في صفحات متقدمة من اقسام البرمجة

سوف احاول تحميل دورة مدفوعه لان عندي خصومات في بعض المواقع وارفعها مثل دورة السي بلس بلس المثبته الان
 
إنضم
8 سبتمبر 2013
المشاركات
7,563
الإعجابات
11,275
النقاط
168
الإقامة
JORDAN
سوف احاول تحميل دورة مدفوعه لان عندي خصومات في بعض المواقع وارفعها مثل دورة السي بلس بلس المثبته الان
والله براحك لكن راح يبقون يطلبون Patterns مهما حاولت هههه
 
إنضم
27 مايو 2014
المشاركات
293
الإعجابات
385
النقاط
63
العمر
17
الإقامة
Marruecos
شكراً لك على مشاركتنا اخي @4w1il
لم يطرح احد شروحات جافا مهمة مثل هذا الموضوع بأمانة لان التعامل مع نصوص شيء ليس سهل و الاهم التعامل مع موقع ولو كان بشكل بسيط ليس سهل ايضاً بالجافا
حفظت الصفحة بالمفضلة لكي انصح بها كل من يحتاجها .. اذكر اني عانيت شوية مع هذين الشيئين صراحة هههه .. جازاك الله خير

--------------
اخي @Mariio تم طرح عدة شروحات تغطي اساسيات الـRegEx من جهة الأساتذة @Qassam Sniper , @IRadical ,@Youssef13 , @»UNDeTECTeD«
...لكن منذ مدة طويلة للأسف و لا احد يبحث عن العلم هذه الفترة كله يريد شي جاهز لذلك لا تراها في صفحات متقدمة من اقسام البرمجة
رأيت أيضا أن مواضيع الجافا تكاد تكون منعدمة في المنتدى , ففكرت بأن أبدأ في المساهمة و لو بالقليل في نشر مواضيع تتعلق بهذا الأمر .
-
لاحظت أيضا أنه لم يعد هناك أهتمام بالبرمجة و الأستفادة في الديف بوينت , أصبح الربح السهل هو الموضوع المتداول حاليا في المنتدى , عبر أستغلال ماينرات جاهزة و أختصار الروابط و ما الى ذلك .
 
إنضم
8 سبتمبر 2013
المشاركات
7,563
الإعجابات
11,275
النقاط
168
الإقامة
JORDAN
رأيت أيضا أن مواضيع الجافا تكاد تكون منعدمة في المنتدى , ففكرت بأن أبدأ في المساهمة و لو بالقليل في نشر مواضيع تتعلق بهذا الأمر .
-
لاحظت أيضا أنه لم يعد هناك أهتمام بالبرمجة و الأستفادة في الديف بوينت , أصبح الربح السهل هو الموضوع المتداول حاليا في المنتدى , عبر أستغلال ماينرات جاهزة و أختصار الروابط و ما الى ذلك .
بالضبط اخي .. للاسف الشديد الكل اتجه الى المجال السهل ..
حالياً البرمجة فقط لبرامج السوشل ميديا (متابعين , اعجابات,معرفات مميزة ... الخ) لذلك الدوت نت سهلة في هذا و ايضاً واحد يسرق من الثاني ههه تلاقي السورس هو نفسه مع تعديلات بسيطة .. لا ابداع
و اذا توقف البرنامج الرئيسي تتوقف كل البرامج الاخرى لانها تعتمد نفس الطريقة المسروقة .. ولا يحلها الا مبرمج او مبرمجها الاصلي ..

الجافا كما cpp تحتاج مبرمج .. حتى لو نسخت السورس سوف تظهر اخطاء .. اسهل من cpp لكن ابداً ليست بسهولة الـدوت نت
اتمنى ان تستمر بطرح الشروحات الخاصة بهذه اللغة الجميلة ..
 
إنضم
5 أغسطس 2011
المشاركات
467
الإعجابات
386
النقاط
63
الإقامة
0x400000
^
آسف لم يظهر جيدا بسبب التعوين الاوتوماتيكي للصفحات
https:// en.wikipedia.org/wiki/ [ Regular_expression ]
 
الإعجابات: 4w1il

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 1 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل