HTML ডেটা পার্স এবং ম্যানিপুলেট করার জন্য ফ্রি সুইফট লাইব্রেরি
ওপেন সোর্স HTML/XML পার্সিং সুইফট লাইব্রেরি যা HTML এবং XML ডকুমেন্ট সহজে পার্স এবং ট্রাভার্স করার জন্য একটি পরিষ্কার সুইফট API প্রদান করে।
ক্যান্না কি?
যদি আপনি কখনও এমন একটি Swift অ্যাপ্লিকেশন তৈরি করে থাকেন যা ওয়েব পেজ থেকে ডেটা বের করতে, XML-এ API রেসপন্স পার্স করতে, অথবা গঠনমূলক কন্টেন্ট স্ক্র্যাপ করতে হয়, তবে আপনি সম্ভবত কাঁচা HTML এবং XML স্ট্রিং নিয়ে কাজ করার চ্যালেঞ্জের মুখোমুখি হয়েছেন। Swift-এর স্ট্যান্ডার্ড লাইব্রেরিতে এই ফরম্যাটগুলির জন্য কোনো নেটিভ, ব্যবহারবান্ধব পার্সার নেই, এখানেই Kanna কাজ করে দিন বাঁচায়। মূলত, Kanna একটি পরিষ্কার Swift API প্রদান করে HTML এবং XML ডকুমেন্ট পার্স এবং ট্রাভার্স করার জন্য। আড়ালে, এটি libxml2-কে ভারী কাজটি অর্পণ করে, যার অর্থ আপনি নিজে জটিল ব্যাকরণ নিয়ম পুনরায় বাস্তবায়ন না করেই দৃঢ় পার্সিং পারফরম্যান্স পান।
কানা স্বিফট ইকোসিস্টেমে তার সরলতা এবং শক্তির জন্য আলাদা হয়ে দাঁড়ায়। এর স্বজ্ঞাত API দিয়ে, আপনি XPath 1.0 এবং CSS3 সিলেক্টরের মতো পরিচিত কুয়েরি পদ্ধতি ব্যবহার করে HTML/XML ডকুমেন্ট নেভিগেট এবং ম্যানিপুলেট করতে পারেন। আপনি ওয়েব স্ক্র্যাপার তৈরি করছেন, RSS ফিড থেকে ডেটা বের করছেন, অথবা XML কনফিগারেশন ফাইল প্রক্রিয়া করছেন, কানার প্রয়োজনীয় টুলস রয়েছে। ক্রস-প্ল্যাটফর্ম সাপোর্ট কানার অন্যতম আকর্ষণীয় বৈশিষ্ট্য। এটি macOS, iOS, tvOS, watchOS এবং এমনকি লিনাক্সে চলতে পারে। XPath 1.0 এবং CSS3 সিলেক্টর আপনাকে ডকুমেন্ট কুয়েরি করার জন্য দুইটি শক্তিশালী, ইন্ডাস্ট্রি-স্ট্যান্ডার্ড পদ্ধতি প্রদান করে। CSS3 সিলেক্টর এবং XPath 1.0 উভয়ের দ্বৈত সমর্থন এটিকে সহজ HTML এক্সট্র্যাকশন থেকে জটিল, নেমস্পেসড XML প্রসেসিং পর্যন্ত সবকিছু হ্যান্ডেল করার জন্য যথেষ্ট নমনীয় করে। আপনি যদি একটি iOS অ্যাপ তৈরি করেন যা RSS ফিড ব্যবহার করে, একটি Vapor সার্ভার যা প্রতিযোগীর মূল্য স্ক্র্যাপ করে, অথবা একটি কমান্ড-লাইন টুল যা XML ডেটা রূপান্তর করে, কানার টুলস আপনাকে নির্ভরযোগ্য এবং সুন্দরভাবে কাজ সম্পন্ন করতে সাহায্য করবে।
ক্যান্না দিয়ে শুরু করা
Kanna ইনস্টল করার সুপারিশকৃত এবং সহজতম পদ্ধতি হল CocoaPods ব্যবহার করা। মসৃণ ইনস্টলেশনের জন্য দয়া করে নিম্নলিখিত কমান্ডটি ব্যবহার করুন।
কারথেজের মাধ্যমে কান্না ইনস্টল করুন
// add the following line to your Podfile:
use_frameworks!
pod 'Kanna', '~> 5.2.2'
// Then run:
$ pod install
কোয়াকাপডসের মাধ্যমে কান্না ইনস্টল করুন
// If you prefer Carthage, add this line to your Cartfile:
github "tid-kijyun/Kanna" ~> 5.2.2
আপনি ম্যানুয়ালি ইনস্টল করতে পারেন; সর্বশেষ রিলিজ ফাইলগুলি সরাসরি GitHub রিপোজিটরি থেকে ডাউনলোড করুন।
স্বিফটের মাধ্যমে HTML ডকুমেন্ট পার্সিং
ওপেন সোর্স Kanna লাইব্রেরি Swift অ্যাপ্লিকেশনের মধ্যে HTML ডকুমেন্ট লোড এবং পার্স করার সমর্থন অন্তর্ভুক্ত করেছে। HTML পার্স করার সবচেয়ে সাধারণ ব্যবহার হল, তা ওয়েব থেকে ডাউনলোড করা হোক বা প্রোগ্রাম্যাটিকভাবে তৈরি করা হোক। এখানে একটি সহজ উদাহরণ রয়েছে যা দেখায় কীভাবে সফটওয়্যার ডেভেলপাররা HTML ফাংশনটি ব্যবহার করতে পারেন, যা একটি রaw HTML স্ট্রিং গ্রহণ করে, তা এনকোড করে এবং একটি ডকুমেন্ট অবজেক্ট রিটার্ন করে, যার মধ্যে .title এবং .body এর মতো প্রপার্টি থাকে, যা সিলেক্টর ছাড়াই সাধারণ উপাদানগুলিতে দ্রুত অ্যাক্সেস প্রদান করে।
Swift লাইব্রেরি ব্যবহার করে UTF-8 এনকোডিং দিয়ে HTML কীভাবে পার্স করবেন?
import Kanna
// A sample HTML string representing a webpage
let htmlString = """
My Tech Blog
স্বিফট পার্সিং-এ স্বাগতম
Kanna HTML পার্সিংকে সহজ এবং মার্জিত করে তোলে।
View on GitHub
"""
// Parse the HTML string using UTF-8 encoding
if let doc = try? HTML(html: htmlString, encoding: .utf8) {
// Access the document title directly via a convenience property
print(doc.title ?? "No title found")
// Output: My Tech Blog
// Access the full body text
print(doc.body?.text ?? "No body")
}
CSS3 সিলেক্টর কুয়েরি সমর্থন
Kanna লাইব্রেরি CSS3 সিলেক্টরের পূর্ণ সমর্থন অন্তর্ভুক্ত করেছে, যা ডেভেলপারদের পরিচিত CSS সিনট্যাক্স ব্যবহার করে উপাদানগুলি খুঁজে পেতে সক্ষম করে। Kanna-এর CSS সিলেক্টর সমর্থন আপনাকে একই সিলেক্টর সিনট্যাক্স ব্যবহার করতে দেয় যা আপনি স্টাইলশিটে বা জাভাস্ক্রিপ্টের querySelectorAll-এ লিখতে পারেন। এটি ওয়েব ডেভেলপমেন্ট ব্যাকগ্রাউন্ড থেকে আসা যে কারো জন্য খুবই স্বজ্ঞাত করে তোলে। নিম্নলিখিত উদাহরণটি দেখায় কীভাবে ব্যবহারকারীরা HTML উপাদানগুলি নির্বাচন করে এবং Swift অ্যাপ্লিকেশনের মধ্যে একাধিক উপাদানের উপর পুনরাবৃত্তি করতে পারে।
Swift লাইব্রেরি ব্যবহার করে একাধিক HTML উপাদান কীভাবে নির্বাচন করবেন এবং তা থেকে টেক্সট কীভাবে বের করবেন?
import Kanna
let htmlString = """
-
Swift বই
$39.99
-
Xcode গাইড
$24.99
-
iOS মৌলিক বিষয়
$49.99
"""
if let doc = try? HTML(html: htmlString, encoding: .utf8) {
// Select all elements with class "product" inside a "ul"
for product in doc.css("ul.product-list li.product") {
// Extract text from nested span elements using child selectors
let name = product.css("span.name").first?.text ?? "Unknown"
let price = product.css("span.price").first?.text ?? "N/A"
// Access HTML attributes using subscript notation
let productId = product["data-id"] ?? "No ID"
print("[\(productId)] \(name) — \(price)")
}
}
XPath 1.0 কুয়েরি সমর্থন
Kanna লাইব্রেরি Swift অ্যাপের মধ্যে XPath 1.0 কুয়েরির সমর্থন অন্তর্ভুক্ত করেছে। XPath একটি আরও শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে XML/HTML ডকুমেন্টের উপাদান এবং অ্যাট্রিবিউটগুলির মাধ্যমে নেভিগেট করার জন্য। এটি বিশেষত জটিল ডকুমেন্ট কাঠামোর জন্য উপযোগী। XPath এক্সপ্রেশনগুলি এমনভাবে ডকুমেন্ট ট্রাভার্স করতে পারে যা CSS সিলেক্টরগুলি করতে পারে না, যেমন উপাদানগুলিকে তাদের অবস্থান, প্যারেন্ট-চাইল্ড সম্পর্ক, অথবা জটিল টেক্সট ম্যাচিংয়ের ভিত্তিতে খুঁজে বের করা। এটি XML পার্সিং এবং জটিল HTML স্ক্র্যাপিংয়ের জন্য অপরিহার্য।
স্বিফটের মাধ্যমে XML পার্সিং এবং ভ্যালিডেশন
বেসিক HTML পার্সিংয়ের বাইরে, ওপেন সোর্স কান্না লাইব্রেরি শক্তিশালী XML হ্যান্ডলিং ক্ষমতা প্রদান করে। এতে সঠিক XML গঠন যাচাই এবং অ্যাট্রিবিউট ম্যানেজমেন্ট অন্তর্ভুক্ত। গঠিত ডেটা নিয়ে কাজ করার সময়, শুধুমাত্র উপাদান নিষ্কাশনের চেয়ে বেশি কিছু প্রয়োজন। কান্না পূর্ণ XML ডকুমেন্ট অ্যাক্সেস প্রদান করে, যার মধ্যে মন্তব্য, প্রসেসিং ইনস্ট্রাকশন এবং ডকুমেন্ট মেটাডেটা অন্তর্ভুক্ত।
Swift অ্যাপের মধ্যে XML পার্সিং কীভাবে করবেন?
import Kanna
let xmlString = """
Swift Developer News
-
Kanna 6.0 Released with Swift 6 Support
Alex Johnson
Mon, 26 Jun 2024 00:00:00 GMT
-
New Features in Swift 5.10
Maria Garcia
Tue, 15 Apr 2024 00:00:00 GMT
"""
if let doc = try? Kanna.XML(xml: xmlString, encoding: .utf8) {
// Define a namespace mapping: prefix -> URI
// The prefix you use here ("dc") can be anything; it maps to the namespace URI
let namespaces = [
"dc": "http://purl.org/dc/elements/1.1/"
]
// Query elements in the "dc" namespace using the prefix
for item in doc.xpath("//item", namespaces: namespaces) {
let title = item.at_xpath("title")?.text ?? "No title"
let creator = item.at_xpath("dc:creator", namespaces: namespaces)?.text ?? "Unknown"
let pubDate = item.at_xpath("pubDate")?.text ?? "No date"
print("Title: \(title)")
print("Author: \(creator)")
print("Published: \(pubDate)\n")
}
}