পর্ব ৮ঃ ওয়েব ক্রলার(রাসবেরি পাইভিত্তিক ইন্টারনেট ক্লক ও অন্যান্য)

ওয়েব ক্রলার হচ্ছে এমন একটি প্রোগ্রাম যা নিজে নিজে ইন্টারনেটের বিভিন্ন ওয়েবসাইট ব্রাউজ করতে পারে এবং তথ্য সংগ্রহ করতে পারে। ইতোমধ্যে এই ধরনের কাজ আমরা করেছি ইফতার অ্যালার্ট টিউটোরিয়ালে। ঐ টিউটোরিয়ালে আমরা একটি API এর সাহায্যে একটি ওয়েবসাইট থেকে গত রমজান মাসে প্রতিদিনের ইফতারের সময়টি দেখেছি এবং সেই নির্ধারিত সময়ে অ্যালার্ম বাজিয়েছি। তবে API নিজেরা তৈরী না করতে জানলে কিছু সমস্যায় পড়তে হয়। ইন্টারনেটে যেসব ওয়েবসাইটে API ব্যবহারের সুযোগ আছে সেগুলো বিনামূল্যে অল্প কিছুদিন ব্যবহার করা যায়। এরপরই টাকা দিয়ে লাইসেন্স নবায়ন করা লাগে। অনেক ওয়েবসাইটে ব্যক্তিগত ই-মেইল আইডি দিয়ে রেজিস্ট্রেশন পর্যন্ত করা যায় না। ওয়েব ক্রলিং জানলে আমাদের রেডিমেড API এর উপর আর নির্ভর করতে হবে না। আমরা নিজেরাই প্রোগ্রাম লিখে কোনো ওয়েবসাইটের HTML কোড থেকে আমাদের প্রয়োজনীয় তথ্যটুকু আলাদা করে নিতে পারব।

এই টিউটোরিয়ালে আমরা ওয়েব ক্রলিং করতে সক্ষম মোট দুইটি প্রোগ্রাম লিখব এবং রাসবেরি পাইতে রান করব। প্রোগ্রামগুলো বুঝতে হলে অবশ্যই পাইথনের রেগুলার এক্সপ্রেশন সম্পর্কে ধারনা থাকতে হবে।

প্রোগ্রাম ১ঃ প্রথম প্রোগ্রামটি রাসবেরি পাইভিত্তিক একটি এলসিডি ক্লকের প্রোগ্রাম যা ইন্টারনেট থেকে সময় আপডেট করবে। আমরা https://www.observerbd.com/ থেকে বাংলাদেশ সময়ের আপডেট নিয়েছি।

এই ওয়েবসাইটের যেখানে সময় দেখানো হয়, সেই অংশটুকু Inspect করলে HTML কোডে আমরা দেখতে পাব সময়ের অংশটি শুরু হয়েছে <div class=”time” >কথাটি দিয়ে এবং শেষ হয়েছে </div> দিয়ে। কাজেই এই দুইয়ের মধ্যবর্তী অংশটুকু আলাদা করে নিলেই আমরা সময় সংক্রান্ত তথ্য পেয়ে যাব।

নিচের প্রোগ্রামে ঠিক এই কাজটিই করা হয়েছে।

আমাদের প্রোগ্রামে আমরা কমান্ড প্রম্পট এবং এলসিডি দুই মাধ্যমেই সময় দেখিয়েছি। রাসবেরি পাইয়ের সাথে এলসিডি কানেক্ট করতে চাইলে অবশ্যই RPLCD লাইব্রেরি ইন্সটল করা থাকতে হবে। RPLCD ইন্সটল করা না থাকলে এই টিউটোরিয়াল দেখে করে নিন।

import requests
import re
from RPLCD import CharLCD
from RPi import GPIO
lcd = CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33,31,29,23])


url="https://www.observerbd.com/"

while True:
    response=requests.get(url)
    text=response.text
    result=re.findall(r'<div class="time">(.*?)</div', text, re.M | re.DOTALL)
    resultstring=" ".join(str(x) for x in result)
    resultstring=resultstring.replace("[u'","")
    resultstring=resultstring.replace(" ]'","")
    print(resultstring)
    lcd.clear()
    lcd.write_string(resultstring)

প্রোগ্রাম ১ এর সার্কিটঃ

প্রয়োজনীয় যন্ত্রপাতি পরিমাণ লিংক
Raspberry pi 3B complete set 1   http://bit.ly/rpi3setb
LCD module 1   http://bit.ly/2FVVPCQ
Female to female jumpers 8   http://bit.ly/2Gk1m1P

সার্কিট কানেকশন ও ডায়াগ্রামঃ এলসিডি মডিউল এবং রাসবেরি পাইয়ের মধ্যে নিচের কানেকশনটি সম্পন্ন করতে হবে।

Raspberry Pi 3 Model B LCD module advanced
VCC VCC
GND GND
37 RS
35 E
33 D4
31 D5
29 D6
23 D7

প্রোগ্রামটি রান করা অবস্থায় এলসিডিতে সময় দেখা যাবে।

প্রোগ্রাম ২ঃ এই প্রোগ্রামটি প্রায় আগেরটির মতই, তবে একটু আলাদা। এই এই প্রোগ্রামে আমরা দুটি ওয়েবসাইট ক্রলিং করব। রাসবেরি পাইয়ের সাথে একটি বাটন সংযুক্ত থাকবে। সেটি একবার প্রেস করলে কমান্ড এলসিডিতে সময় এবং আবার প্রেস করলে টাকায় গ্রামপ্রতি স্বর্নের মূল্য লাইভ দেখা যাবে।

import requests
import re
import time                                                    
import RPi.GPIO as GPIO
from RPLCD import CharLCD
from RPi import GPIO
lcd = CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33,31,29,23])
lcd.clear()



button_switch = 8
GPIO.setmode(GPIO.BOARD)                                       
GPIO.setup(button_switch, GPIO.IN)
previous_state = 0                                         
present_state = 0
flag=0
url="http://goldpricez.com/bd/gram"
url2="https://www.observerbd.com/"




while True:
              
    
          input_value = GPIO.input(button_switch)
          #previous_state = input_value
          if(input_value == True):
              
              if(flag==0):
                  response=requests.get(url)
                  text=response.text
                  result=re.findall(r'<span class="display_rates">(.*?)</div', text, re.M | re.DOTALL)
                  resultstring=" ".join(str(x) for x in result)


                  resultstring=resultstring.replace("  
  ","")
                  resultstring=resultstring.replace(" 1 Gram Gold Price","")
                  resultstring=resultstring.replace(" </span>","")
                  resultstring=resultstring.replace("\n","")
                  resultstring=resultstring.replace("= ","=")
                  resultstring=resultstring.replace("     BDT","BDT")
                  
                  print(resultstring)
                  lcd.clear()
                  lcd.write_string(resultstring)
                  lcd.cursor_pos = (1,0) 
                  lcd.write_string("/gm 18 ct gold")


                  flag=1
              elif(flag==1):
                  
                  response2=requests.get(url2)
                  text2=response2.text
                  result2=re.findall(r'<div class="time">(.*?)</div', text2, re.M | re.DOTALL)
                  resultstring2=" ".join(str(y) for y in result2)
                  resultstring2=resultstring2.replace("[u'","")
                  resultstring2=resultstring2.replace(" ]'","") 
                  print(resultstring2)
                  lcd.clear()
                  lcd.write_string(resultstring2)

                  flag=0
              
         
            
                 
             
          
              
             

    




প্রোগ্রাম ২ এর সার্কিটঃ এলসিডির কানেকশনটি আগের মতই থাকবে। নিচের সার্কিট অনুযায়ী একটি বাটন এবং পুল ডাউন রেজিস্টর যুক্ত হবে।

প্রয়োজনীয় আরও যন্ত্রপাতি পরিমান প্রোডাক্ট লিংক
Breadboard 1 http://bit.ly/2IjyUPg
330 ohm resistor 4 http://bit.ly/2L3AiX1
Male to Female jumpers 3 http://bit.ly/2rIu6w2
Push switch 1http://bit.ly/2lPQ6SU

প্রোগ্রামটি রান করা অবস্থায় একবার বাটনটি প্রেস করলে সময় এবং আরেকবার প্রেস করলে গ্রামপ্রতি স্বর্ণের মূল্য দেখা যাবে।

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.