الاستفادة من خدمات تقصير العناوين برمجيا – مقدمة

This article is available in English too, check it out here.

اقرأ أكثر عن خدمات تقصير العناوين هنا.

المحتويات

محتويات هذا الموضوع:

  • المحتويات
  • نظرة خاطفة
  • مقدمة
  • التعامل مع خدمات الإنترنت
  • التوثيق
  • دعم الدوت نت
  • الترميز
  • المثال
  • التالي
  • تصويت: ما هي خدمات تقصير العناوين المفضلة لديك؟

نظرة خاطفة

هذا هو الدرس الأول في سلسلة خدمات تقصير العناوين برمجيا. اليوم نتكلم عن الأساسيات التي سنحتاج إليها أثناء دراستنا في هذا الموضوع، سنتعرض لكيفية التعامل برمجيا مع خدمات الويب، وكيفية النداء على الدوال والحصول على النتائج المطلوبة، وأيضا سنتكلم عن دعم الدوت نت لخدمات الويب.

هذا الدرس هو نقطة بدايتنا للشرح التفصيلي لبرمجة أشهر خدمات التقصير. سيتم نشر المواضيع بصفة دورية، يرجى المتابعة.

مع الدرس مثال كامل يقوم بالاستفادة من هذه الخدمات ويستخدم في تقصير العناوين.

هيا بنا!

مقدمة

URL Shortening Servicesخدمات تقصير العناوين URL Shortening Services هي من أهم وأشهر الخدمات المستخدمة اليوم حيث أن عناوين الإنترنت أصبحت طويلة وأصبح من الصعب تداولها وإرسالها سواء في البريد الإلكتروني أو في الشبكات الاجتماعية أوخدمات التدوين البسيط مثل تويتر، ومن هنا جاءت أهمية هذه الخدمات.

اليوم أصبح هناك العشرات من المواقع التي توفر لك خدمة تقصير العناوين، وأظن أنه من الصعب حصر هذه المواقع كلها، ولكن ربما تحب إلقاء نظرة على العديد منهم في هذه المواضيع:

اليوم نبتدئ سلسلة خدمات تقصير العناوين، كيفية الاستفادة منها وبرمجتها. في هذه السلسلة سنتكلم عن كيفية الاستفادة من أشهر خدمات تقصير العناوين برمجيا باستخدام التقنيات التي توفرها لنا بيئة الدوت نت. سيكون دأبنا في هذه السلسلة هو أن نبدأ أولا (في هذا الدرس) بفكرة عامة عن كيفية برمجة خدمات الويب، ثم سنتبعها بعد ذلك في الدروس القادمة -والتي سيتم نشرها دوريا- سنتبعها في كل درس بشرح لخدمة معينة، أهم مميزاتها، وكيفية برمجتها.

في هذه السلسلة سنتعرض لهذه الخدمات (سنقوم بتحديث هذه القائمة دوريا، تابعنا):

ربما تكون القائمة السابقة لا تحوي الأشهر في مجال خدمات تقصير العناوين، ولكنها بالطبع تحوي أشهر الخدمات التي توفر طريقة للاستفادة منها برمجيا. بمعنى آخر، توفر واجهة تطبيق برمجية API (Application Programming Interface).

الآن إلى شرح أساسيات التعامل مع خدمات الويب وكيفية برمجتها والاستفادة القصوى منها.

التعامل مع خدمات الإنترنت

بالتأكيد هذا المصطلح ليس غريبا عليك، واجهة التطبيق البرمجية API، ولكن الجديد اليوم أن هذه الواجهة البرمجية متوفرة على الإنترنت وليس نظام التشغيل، وهذه ما نسميها خدمات الويب Web Services.

توفر لك بعض الخدمات على الإنترنت طريقة للاستفادة منها برمجيا، وهذه الطريقة تسمى خدمة الويب Web Service (بدلا من API.) وخدمة الويب هذه هي عبارة عن مجموعة من نقاط الوصول Endpoints أو بمعنى أبسط مجموعة من الدوال ممثلة في عناوين إنترنت عندما تقوم بالنداء عليها تحصل على النتيجة المطلوبة.

فمثلا، لنفترض أننا لدينا خدمة لتقصير العناوين والتي يمكن الوصول إليها من خلال العنوان http://ab.c. نفترض أيضا أن هذه الخدمة توفر لك واجهة برمجية أو خدمة ويب وهي عبارة عن مجموعة من الدوال وأحد هذه الدوال هي دالة التقصير Shrink والتي يمكن الوصول إليها من خلال العنوان http://ab.c/api/shrink. فمثلا إذا أحببت أن تقوم بتقصير العنوان www.google.com باستخدام هذه الدالة فإنك تقوم بإرسال البيانات المطلوبة في شكل مدخلات لهذه الدالة ويتم ذلك عن طريق النداء على الدالة متبوعة بالمدخلات المطلوبة مثلا http://ab.c/api/shrink?url=www.google.com. وتقوم هذه الدالة بإرجاع النتيجة المطلوبة (العنوان القصير) والذي يمكن مشاهدتها بمجرد وضع العنوان الأخير في شريط العنوان في المتصفح الخاص بك.

هكذا تعمل أغلب خدمات تقصير العناوين، مجرد معرفتك عنوان الدوال المطلوبة وأسماء المدخلات المطلوبة كافي لإتمامك المهمة كاملة بنجاح. ولكن، ربما أغفلنا العديد من التفاصيل!

تقوم الدالة بتحديد صيغة القيمة المرتجعة منها، فإما أن ترجع مثلا بيانات XML، Atom، JSON، أو ربما نص عادي ليس له أي صيغة. وهذه الصيغة يمكن معرفتها من قراءة الشرح الخاص بهذه الدالة على الويب. لاحظ أيضا، أنه ربما ترجع هذه الدالة خطأ وذلك عند فشل العملية، هذه الأخطاء تراجعها أيضا من الشرح للدالة. (بالطبع لن نهمل هذه الجزئيات، سنتكلم ونفصل في موضوع الصيغة وعملية تفادي الأخطاء في هذه السلسلة.)

قم بملاحظة أيضا أن معدل النداء على هذه الدوال محدود، أي أنك لا تستطيع كتابة كود النداء على هذه الدالة في دوارة Loop وتركها! يمكنك متابعة هذه التفاصيل في الشرح الخاص بالدوال على الويب، والذي سنذكره هنا أيضا.

التوثيق

بعض خدمات التقصير تطلب من المستخدم أن يكون مسجلا ليتمكن من استخدام الخدمة، البعض الآخر لا تطلب تسجيل إطلاقا، والبعض يتيح للمستخدم استخدام الخدمة سواء كان مسجلا أم لا.

بطريقة مماثلة تعمل واجهات البرمجة الخاصة بهذه الخدمات. بعض الدوال لا تحتاج إلى توثيق، والبعض الآخر يحتاج. وعملية التوثيق إما أن تتم ببيانات دخول المستخدم أو بمفتاح برمجي يمكن للمستخدم الحصول عليه من خلال لوحة التحكم الخاصة به في موقع الخدمة. والطريقة الأخيرة هي الأشهر.

دعم الدوت نت

هل يدعم الدوت نت طريقة للاستفادة من خدمات الويب؟ بالطبع نعم. فطالما هذه الخدمات هي مجرد عناوين إنترنت يمكن الوصول إليها، فيمكننا الاستفادة من التصنيفات الموجودة في المكتبة System.dll (تحديدا النطاق System.Net) والتي تساعدنا على التعامل مع الطلبات/الإجابات Requests/Responses باستخدام بروتوكول HTTP المستخدم في خدمات الويب هذه (لا تنزعج كثيرا من السطر الأخير سوف نقوم بالتفصيل فيه في خلال دراستنا.)

فأنت تقوم بعمل طلب Request على الدالة باستخدام المدخلات المطلوبة http://ab.c/api/shrink?url=www.google.com وتحصل على إجابة Response من الدالة والتي تحوي البيانات المرتجعة.

ببساطة، إذا أردنا أن نقوم بالنداء على دالتنا الأخيرة هذه سوف نقوم باستخدام كود مشابه (أو مماثل) للتالي:

// C#

public void string Shorten(string url)
{
    string reqUri = @"http://ab.c/api/shrink?url=" + url;

    WebRequest req = WebRequest.Create(reqUri);
    req.Timeout = 5000;

    XmlDocument doc = new XmlDocument();
    doc.Load(req.GetResponse().GetResponseStream());

    return HandleXml(doc);
}
' VB.NET

Function Shorten(ByVal url As String) As String

    Dim reqUri As String = "http://ab.c/api/shrink?url=" & url

    Dim req As WebRequest = WebRequest.Create(reqUri)
    req.Timeout = 5000

    Dim doc As new XmlDocument()
    doc.Load(req.GetResponse().GetResponseStream())

    Return HandleXml(doc)

End Function

الترميز

الترميز Encoding هو عملية إزالة الحروف الإشكالية من المدخلات. بمعنى أنه لو افترضنا أننا نريد مثلا تقصير هذا العنوان http://justlikeamagic.com/?s=twitter فإننا نقوم مؤكدا بتحديده بإرساله كمدخلات للدالة http://ab.c/api/shrink?url=http://justlikeamagic.com/?s=twitter. هنا يظهر الإشكال!

نلاحظ في النداء الأخير أننا لدينا اثنان من علامات الاستفهام ’؟‘ وأيضا اثنان من علامة المعادلة ’=‘ وغيرها، وهذا يظهر إشكال: هل علامة المعادلة الثانية مثلا خاصة بالدالة أي أنها مدخل آخر من مدخلات الدالة أو أنها خاصة بالعنوان المراد تقصيره؟ وفي حالة أنه هناك مثلا مسافة في العنوان، كيف نقوم بحل هذه المشكلة؟ هنا تظهر فائدة الترميز. نقوم بتحويل هذه الحروف التي يمكن أن تسبب مشكلة إلى قيمتها بالنظام الست عشري مبدوءة بعلامة النسبة المئوية ’%‘. أي أنه إذا كانت هناك مسافة مثلا في العنوان فيمكننا تبديلها إلى قيمتها الترميزية وهي ’%20‘ وهنا تحل المشكلة.

ببساطة يمكنك استخدام الدالة EscapeUriString() الموجودة في التصنيف System.Net.Uri لتطبيق عملية الترميز والتي تتم على مجموعة معينة من الحروف التي يمكن أن تسبب مشكلة في عناوين الويب وهذا كافي لنا الآن. ولكن إذا أردت عملية ترميز كاملة فيمكنك إما كتابة الكود الخاص بك أو استخدام الكود التالي:

// C#

char[] _chars = new char[]
{
     '%',
     '$' ,
     '&',
     '+',
     ',',
     '/',
     ':',
     ';',
     '=',
     '?',
     '@',
     ' ',
     '"',
     '',
     '#',
     '{',
     '}',
     '|',
     '',
     '^',
     '~',
     '[',
     ']',
     ''', };

string EncodeUrl(string url)
{
    for (int i = 0; i < _chars.GetUpperBound(0); i++)
        url = url.Replace(
            _chars[i].ToString(),
            string.Format("{0:X}", (int)_chars[i]));

    return url;
}

string DecodeUrl(string url)
{
    for (int i = 0; i < _chars.GetUpperBound(0); i++)
        url = url.Replace(
            string.Format("{0:X}", (int)_chars[i]),
            _chars[i].ToString());

    return url;
}

' VB.NET

Private _chars() As String = _
{ _
"%", _
"$", _
"&", _
"+", _
",", _
"/", _
":", _
";", _
"=", _
"?", _
"@", _
" ", _
"", _
"”, _
“#”, _
“{“, _
“}”, _
“|”, _
“”, _
“^”, _
“~”, _
“[“, _
“]”, _
“‘”}

Public Function EncodeUrl(ByVal url As String) As String
For i As Integer = 0 To _chars.GetUpperBound(0) – 1
url = url.Replace( _
_chars(i).ToString(), _
String.Format(“{0:X}”, CInt(_chars(i))))
Next

Return url
End Function

Public Function DecodeUrl(ByVal url As String) As String
For i As Integer = 0 To _chars.GetUpperBound(0) – 1
url = url.Replace( _
String.Format(“{0:X}”, CInt(_chars(i))), _
_chars(i))
Next

Return url
End Function

المثال

سوف نقوم بإضافة روابط تحميل المثال قريبا فور قيامنا بنشر أجزاء قادمة من هذه السلسلة. تابعونا دائما.

التالي

الآن يمكنك البدء بالقراءة في أي خدمة تريدها (نقوم بتحديث الروابط فور نشر المواضيع، ونقوم بإضافة خدمات أخرى إلى القائمة):

أو يمكنكم متابعة مواضيع خدمات تقصير العناوين هنا.

تصويت

اترك تعليقا