البرنامج النصي لسعر الصرف. كيفية الحصول على أسعار الصرف الرسمية لتاريخ معين بلغة PHP

هناك العديد من البرامج النصية على الإنترنت التي تعرض أسعار الصرف. لكنني كنت بحاجة إلى الدولار واليورو من البنك المركزي. قررت البحث عن البرامج النصية التي ستظهر أسعار الصرف الرسمية لـ تاريخ معين . جئت عبر مقال jQuery مثير للاهتمام يقوم بفرز جدول. هناك في البرنامج النصي محلل سعر صرف PHP"يتم سرقة مستند xml باستخدام التعبيرات العادية. تستخدم التعبيرات العادية بكثرة في سرقة التعليمات البرمجية. يعمل البرنامج النصي بشكل رائع ، لكن له خصائصه الخاصة. إنه ينتج جدول بتنسيق HTML يحتوي على عدد كبير من العملات. أحتاج تشكيل مصفوفة JSON من جدول مع أسعار الصرف. هذه المجموعة تشبه السجق. هذا ما يسميه المبرمجون مثل هذه المصفوفة. هناك نقانق كبيرة جدا في بأعداد كبيرة)))

/ * * getArr () * أسعار الصرف من البنك المركزي * تم تحليل مستند xml * * / function getArr () ($ url = "http://www.cbr.ru/scripts/XML_daily.asp؟date_req=". التاريخ ("d / m / Y"، strtotime ("+ 0 day"))؛ $ cbr_xml = str_replace (array ("\ n"، "\ r"، "\ t")، ""، getContentPage ($ url )) ؛ if (preg_match_all ("~ (. *؟) ~ i"، $ cbr_xml، $ Valute)) (foreach ($ Valute as $ data) (preg_match ("~ (. *؟) ~ i"، $ data ، $ CharCode)؛ preg_match ("~ (. *؟) ~ i"، $ data، $ NumCode)؛ $ arr [$ CharCode] ["num_code"]. = $ NumCode؛ preg_match ("~ (. *؟) ~ i "، $ data، $ Nominal)؛ $ arr [$ CharCode] [" nominal "] = $ Nominal؛ preg_match (" ~ (. *؟) ~ i "، $ data، $ Name)؛ $ arr [$ CharCode] ["name"]. = toUtf8 ($ Name)؛ preg_match ("~ (. *؟) ~ i"، $ data، $ Value)؛ $ arr [$ CharCode] ["value"]. = $ Value ؛ $ i ++؛) إرجاع $ arr؛)) دالة getContentPage ($ url) ($ c = curl_init ($ url)؛ curl_setopt ($ c، CURLOPT_RETURNTRANSFER، 1)؛ curl_setopt ($ c، CURLOPT_FOLLOWLOCATION، 1)؛ $ text = curl_exec ($ c)؛ curl_close ($ c)؛ return $ text؛) // ترميز وظيفة Utf8 إلىUtf8 ($ str) (إرجاع mb_convert_encoding ($ str، "utf-8"، "windows-1251")؛ ) $ arr = getArr ()؛ echo json_encode ($ arr) ؛ / * ("EUR" :( "num_code": "978"، "اسمي": "1"، "name": "\ u0415 \ u0432 \ u0440 \ u043e"، "value": "63،6090") ، "USD": "58.0374")) * /

أنت تستطيع عرض سعر الصرف اليوم وسعر الصرف أمس. تسمح لك وظيفة strtotime ("+ 0 يوم") بتغيير الوقت. بالطبع ، كم عدد الأصفار التي لا يتم جمعها على أي حال ، لن تتغير قيمة المتغير. لقد تركت هذا الجزء من الكود بحيث يمكنك تغيير الوقت في أي وقت. اضطررت إلى إعادة ترتيب المصفوفة قليلاً. لقد استخدمت متغير $ CharCode كمفتاح للصفيف. هناك العديد من المصفوفات الأخرى في المصفوفة الكبيرة الخاصة بي ، ويمكنك فقط الوصول إلى مصفوفة معينة عن طريق المفتاح (EUR). في حالتي ، يأخذ المتغير CharCode $ القيم التالية:

  1. AUD => دولار أسترالي
  2. AZN => المانات الأذربيجاني
  3. الجنيه الإسترليني => الجنيه الإسترليني البريطاني
  4. AMD => الدراما الأرمنية
  5. BYR => روبل بيلاروسي
  6. BGN => ليف بلغاري
  7. BRL => ريال برازيلي
  8. HUF => فورنت مجري
  9. DKK => كرونة دانمركية
  10. USD => دولار أمريكي
  11. EUR => اليورو
  12. INR => روبية هندية
  13. KZT => تنغي كازاخستان
  14. CAD => دولار كندي
  15. KGS => سوم قرغيزستاني
  16. CNY => اليوان الصيني
  17. MDL => لي مولدوفا
  18. NOK => كرونة نرويجية
  19. PLN => زلوتي بولندي
  20. RON => ليو روماني جديد
  21. XDR => SDR (حقوق السحب الخاصة)
  22. SGD => الدولار السنغافوري
  23. TJS => سوموني طاجيكستاني
  24. TRY => ليرة تركية
  25. TMT => مانات التركمان الجديد
  26. UZS => المبلغ الأوزبكي
  27. UAH => هريفنيا أوكرانية
  28. CZK => الكورونا التشيكية
  29. SEK => كرونا سويدية
  30. CHF => فرنك سويسري
  31. ZAR => راند جنوب إفريقيا
  32. وون كوري جنوبي => وون كوري
  33. JPY => ين ياباني

أنا مهتم فقط بالدولار الأمريكي واليورو. لم أزل من

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

تبدو هذه الوظيفة كما يلي:

الدالة get_currency ($ currency_code ، $ format) ($ date = date ("d / m / Y") ؛ // التاريخ الحالي $ cache_time_out = "3600" ؛ // Cache lifetime بالثواني $ file_currency_cache = __DIR __. "/ XML_daily. asp "؛ if (! is_file ($ file_currency_cache) || filemtime ($ file_currency_cache)< (time() - $cache_time_out)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $out = curl_exec($ch); curl_close($ch); file_put_contents($file_currency_cache, $out); } $content_currency = simplexml_load_file($file_currency_cache); return number_format(str_replace(",", ".", $content_currency->xpath ("القيمة") -> القيمة) ، تنسيق $) ؛ )

يحتوي على الخطوط:

التاريخ بالدولار = التاريخ ("يوم / شهر / سنة") ؛ // التاريخ الحالي $ cache_time_out = "3600" ؛ // مدة ذاكرة التخزين المؤقت بالثواني

هي المسؤولة عن التاريخ (في حالتنا ، هو التاريخ الحالي) وعمر ذاكرة التخزين المؤقت ، على التوالي. نظرًا لأن البنك المركزي لا يقوم بتحديث بيانات العملة كثيرًا ، فلا يجب أن تزعجه تمامًا مثل هذا في كل مرة تستخدمها. يمكنك تغيير القيم الموجودة في هذه الأسطر (اختياريًا) إلى القيم الخاصة بك.

استخدام الوظيفة كما يلي:

echo get_currency ("USD"، 3) ؛

هنا " دولار أمريكي"هو رمز عملة رمزي (في حالتنا ، هو الدولار الأمريكي) ، و" 3 "- عدد من الرموز بعد الفاصلة.

قائمة العملات المقبولة المقدمة من البنك المركزي للاتحاد الروسي (في وقت كتابة هذا التقرير) في شكل "رمز العملة المحرف - الفئة والاسم":

AUD - 1 دولار أسترالي AZN - 1 مانات أذربيجاني GBP - 1 جنيه إسترليني AMD - 100 درام أرميني BYN - 1 روبل بيلاروسي BGN - 1 ليف بلغاري BRL - 1 ريال برازيلي HUF - 100 HUF HKD - 10 دولارات هونغ كونغ DKK - 10 دنماركي كرونة دولار أمريكي - 1 دولار أمريكي يورو - 1 يورو INR - 100 روبية هندية KZT - 100 تنغي كازاخستاني - 1 دولار كندي KGS - 100 قرغيزستان سوم CNY - 10 يوان صيني MDL - 10 MDL NOK - 10 كرون نرويجي PLN - 1 زلوتي بولندي RON - 1 ليو روماني XDR - 1 SDR (حقوق السحب الخاصة) SGD - 1 دولار سنغافوري TJS - 10 طاجيك سوموني TRY - 1 ليرة تركية TMT - 1 مانات تركمان جديد UZS - 10000 UZS UAH - 10 هريفنيا أوكرانية CZK - 10 كرونة تشيكية - 10 كرونة سويدية كرونة سويدية فرنك سويسري - 1 فرنك سويسري ZAR - 10 راند جنوب أفريقي وون كوري - 1000 وون جمهورية كوريا

آمل أن تجد الوظيفة مكانها في مشروعك. إذا كانت لديك أي أسئلة أو كان هناك شيء يبدو غير مفهوم - تأكد من الكتابة عنه في التعليقات الموجودة أسفل هذه المقالة.

لقد رأى الكثير منكم مرارًا وتكرارًا أن بعض المواقع تظهر معدل التحويل. طبعا مديري هذه المواقع أنفسهم لا يغيرونها يوميا (آمل). يقومون بتنزيلها من موقع البنك المركزي. وفي هذه المقالة سأقدم الرمز نص PHP لتنزيل أسعار الصرف من موقع البنك المركزيوعرضها على الصفحة.

هذا هو رمز البرنامج النصي:

التاريخ بالدولار = التاريخ ("يوم / شهر / سنة") ؛ // تاريخ اليوم بالشكل المطلوب
$ link = "http://www.cbr.ru/scripts/XML_daily.asp؟date_req=$date"؛ // رابط إلى ملف XML مع أسعار الصرف
المحتوى $ = file_get_contents (رابط $) ؛ // تنزيل محتوى الصفحة
$ dom = domDocument الجديد ("1.0"، "cp1251")؛ // إنشاء DOM
$ dom-> loadXML ($ content) ؛ // قم بتحميل مستند XML في DOM
$ root = $ dom-> documentElement؛ // احصل على عنصر الجذر
$ childs = $ root-> childNodes ؛ // احصل على قائمة بالعناصر التابعة
$ data = array ()؛ // مجموعة البيانات
لـ ($ i = 0 ؛ $ i< $childs->طول؛ i ++ دولار أمريكي) (
$ childs_new = $ childs-> عنصر ($ i) -> childNodes ؛ // احصل على العقد الفرعية
لـ ($ j = 0 ؛ $ j< $childs_new->طول؛ ++ j $) (
/ * نبحث عن العملات التي نهتم بها * /
$ el = $ childs_new-> عنصر ($ j) ؛
$ code = $ el-> nodeValue؛
if (($ code == "USD") || ($ code == "EUR")) $ data = $ childs_new؛ // أضف العملات الضرورية إلى المصفوفة
}
}
/ * حلقة خلال المصفوفة ببيانات العملة * /
لـ ($ i = 0 ؛ $ i< count($data); $i++) {
قائمة $ = بيانات $ [$ i] ؛
لـ ($ j = 0 ؛ $ j< $list->طول؛ ++ j $) (
$ el = قائمة $-> عنصر ($ j) ؛
/ * عرض أسعار الصرف * /
إذا ($ el-> nodeName == "الاسم") صدى $ el-> nodeValue. "-"؛
elseif ($ el-> nodeName == "Value") صدى $ el-> nodeValue. "
";
}
}
?>

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

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

تبدو هذه الوظيفة كما يلي:

الدالة get_currency ($ currency_code ، $ format) ($ date = date ("d / m / Y") ؛ // التاريخ الحالي $ cache_time_out = "3600" ؛ // Cache lifetime بالثواني $ file_currency_cache = __DIR __. "/ XML_daily. asp "؛ if (! is_file ($ file_currency_cache) || filemtime ($ file_currency_cache)< (time() - $cache_time_out)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $out = curl_exec($ch); curl_close($ch); file_put_contents($file_currency_cache, $out); } $content_currency = simplexml_load_file($file_currency_cache); return number_format(str_replace(",", ".", $content_currency->xpath ("القيمة") -> القيمة) ، تنسيق $) ؛ )

يحتوي على الخطوط:

التاريخ بالدولار = التاريخ ("يوم / شهر / سنة") ؛ // التاريخ الحالي $ cache_time_out = "3600" ؛ // مدة ذاكرة التخزين المؤقت بالثواني

هي المسؤولة عن التاريخ (في حالتنا ، هو التاريخ الحالي) وعمر ذاكرة التخزين المؤقت ، على التوالي. نظرًا لأن البنك المركزي لا يقوم بتحديث بيانات العملة كثيرًا ، فلا يجب أن تزعجه تمامًا مثل هذا في كل مرة تستخدمها. يمكنك تغيير القيم الموجودة في هذه الأسطر (اختياريًا) إلى القيم الخاصة بك.

استخدام الوظيفة كما يلي:

echo get_currency ("USD"، 3) ؛

هنا " دولار أمريكي"هو رمز عملة رمزي (في حالتنا ، هو الدولار الأمريكي) ، و" 3 "- عدد من الرموز بعد الفاصلة.

قائمة العملات المقبولة المقدمة من البنك المركزي للاتحاد الروسي (في وقت كتابة هذا التقرير) في شكل "رمز العملة المحرف - الفئة والاسم":

AUD - 1 دولار أسترالي AZN - 1 مانات أذربيجاني GBP - 1 جنيه إسترليني AMD - 100 درام أرميني BYN - 1 روبل بيلاروسي BGN - 1 ليف بلغاري BRL - 1 ريال برازيلي HUF - 100 HUF HKD - 10 دولارات هونغ كونغ DKK - 10 دنماركي كرونة دولار أمريكي - 1 دولار أمريكي يورو - 1 يورو INR - 100 روبية هندية KZT - 100 تنغي كازاخستاني - 1 دولار كندي KGS - 100 قرغيزستان سوم CNY - 10 يوان صيني MDL - 10 MDL NOK - 10 كرون نرويجي PLN - 1 زلوتي بولندي RON - 1 ليو روماني XDR - 1 SDR (حقوق السحب الخاصة) SGD - 1 دولار سنغافوري TJS - 10 طاجيك سوموني TRY - 1 ليرة تركية TMT - 1 مانات تركمان جديد UZS - 10000 UZS UAH - 10 هريفنيا أوكرانية CZK - 10 كرونة تشيكية - 10 كرونة سويدية كرونة سويدية فرنك سويسري - 1 فرنك سويسري ZAR - 10 راند جنوب أفريقي وون كوري - 1000 وون جمهورية كوريا

آمل أن تجد الوظيفة مكانها في مشروعك. إذا كانت لديك أي أسئلة أو كان هناك شيء يبدو غير مفهوم - تأكد من الكتابة عنه في التعليقات الموجودة أسفل هذه المقالة.

مساء الخير أيها الأصدقاء الأعزاء. كما تعلم ، حدث مؤخرًا (11 فبراير) تخفيض آخر لقيمة العملة في كازاخستان ، هذا "الثلاثاء الأسود" كما أطلق عليه الكثيرون على الإنترنت ، ضرب جيوب الكثيرين. لن أكتب مقالاً سلبياً آخر حول هذا الموضوع. لا أعتقد أنه ضروري. ماحدث قد حدث. ولكن في ذلك اليوم المشؤوم ، شعرت بالغضب الشديد من حقيقة أنه لم يكن من الممكن في أي مكان على الإنترنت معرفة سعر الصرف الدقيق للدولار أو اليورو أو غيرهما سعر صرف العملات. لم تكن جميع المواقع المعروفة وغير المعروفة (hello google) متاحة لي. ربما لم تكن بعض المواقع محبذة لدى المستخدمين الكازاخستانيين ولم تكن جاهزة لمثل هذا العبء من المستخدمين. لكن الحقيقة تبقى أن المواقع لم تنجح.

وفي المساء ، عندما بدأت شغفي بتخفيض قيمة العملة تهدأ وبدأت أعصابي تهدأ ، قررت أنني بحاجة إلى أن أكتب لنفسي مخبراً صغيراً عن سعر الصرف على مدونتي الصغيرة المريحة. كما قلت أعلاه ، لم أرغب في استخدام أدوات المواقع الأخرى ، لأن هذه المواقع كانت "كاذبة" عندما أراد كل موقع kaznet معرفة سعر الصرف اللعين هذا. :) يوجد أدناه سكربت مخبر php ، أعتقد أن السكربت لا يحتاج إلى تعليقات:

المبلغ بالدولار = "1" ؛
دولار من = "دولار أمريكي" ؛
$ من = "EUR" ؛
$ من = "RUB" ؛
$ to = "KZT" ؛
أنا دولار = 0 ؛
بينما ($ i<= 2){
أنا ++ دولار ؛
$ get = تنفجر (" "، $ get) ؛
$ get = تنفجر ("
"، $ get) ؛


";
}
?>

البرنامج النصي عالمي ، يمكنك تغيير المتغير $ إلىإلى عملة أخرى تريد التحويل إليها ، بالإضافة إلى زيادة المصفوفات أو تغييرها $ من [؟]، أضف عملات أخرى ، فقط لا تنس تغيير شرط الحلقة إذا قمت بزيادة عدد العملات المسحوبة. يمكنك الحصول على معرّف (الاسم) للعملات من الرابط - https://www.google.com/finance/converter. كما فهمت على الأرجح ، يوزع النص البرمجي صفحة google هذه في حلقة ويأخذ المعلومات التي تحتاجها.

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

ملاحظة: بالنسبة لي ، قمت بتحسين البرنامج النصي قليلاً (تمت إضافة التخزين المؤقت) وأعطيت مهمة cron لتحديث النص البرمجي مرة واحدة في الساعة. يحفظ الإصدار الخاص بي ملف * .html وأعرضه في عناصر واجهة المستخدم ، عبر ajax.

// بدء التخزين المؤقت للإخراج
ob_start () ،

المبلغ بالدولار = "1" ؛
دولار من = "دولار أمريكي" ؛
$ من = "EUR" ؛
$ من = "RUB" ؛
$ to = "KZT" ؛
أنا دولار = 0 ؛
بينما ($ i<= 2){
أنا ++ دولار ؛
$ get = file_get_contents ("https://www.google.com/finance/converter؟a=$amount&from=$from[$i]&to=$to")؛
$ get = تنفجر (" "، $ get) ؛
$ get = تنفجر ("
"، $ get) ؛
$ convert_amount = preg_replace ("/ [^ 0-9 \.] /"، null، $ get)؛
$ convert_amount = round ($ convert_amount، 2)؛
صدى مبلغ $. "". $ من [$ i]. "=". $ convert_amount. "". $ to. "
";
}

// حفظ الإخراج الملتقط إلى ملف html
file_put_contents ("currency.html"، ob_get_contents ()) ؛
// إنهاء التخزين المؤقت وعرض الصفحة
ob_end_flush () ،
?>

احفظ البرنامج النصي بتنسيق * .php ، يُنصح بحفظه في مجلد منفصل (على سبيل المثال ، في مجلد "البرامج النصية" ، حتى لا يؤدي إلى انسداد الموقع. بعد ذلك ، ستحتاج إلى إضافة مهمة في cron ، قم بالوصول إلى البرنامج النصي كل n ساعة. وبمجرد استخدام المتصفح ، قم بالوصول يدويًا إلى البرنامج النصي بحيث يقوم بإنشاء ملف html ، والذي سنشير إليه في المستقبل. بعد ذلك ، يمكنك عرض البرنامج النصي في عناصر واجهة المستخدم من خلال iframe:

<النصي>
وظيفة show_temp ()
{
$ .ajax ((
url: "http: //yoursite/scripts/currency.html" ،
مخبأ: خطأ
النجاح: الوظيفة (html) (
$ ("# currency"). html (html)؛
}
});
}
$ (مستند). جاهز (الوظيفة () (
show_temp () ؛
});

سيسمح لك هذا النوع من الإخراج بتغيير حجم الخط أو لونه أو إضافة أي تأثيرات أخرى عبر CSS (ورقة الأنماط المتتالية).

لن يتم تحميل الإصدار الأمثل من النص البرمجي على الخادم والوصول إلى Google باستمرار. يمكنك تنفيذ التخزين المؤقت بشكل مختلف والتحقق من التاريخ حتى لا تستخدم cron. ولكن شخصيًا ، انطلقت من نسخة بسيطة. لا أحب أن أكون ذكيًا . :)

غسالة مكسورة؟ 1v.kz سوف يساعد! - إصلاح الغسالات في الماتي:

متخصصون من جميع أنحاء المدينة

يشارك