Data Extraction

In this section, we are going to illustrate how to use the APIs for downloading, loading and deleting the data.

Downloading OpenITI Data

The data is available in the repositories of OpenITI Github group, arranged according to Hijrah year of the books. Further, most of these books are also available in the catalog of books metadata of the KITAB project, which can be accessed via this link.

julia> using Kitab
julia> muslimsahih = "https://raw.githubusercontent.com/OpenITI/0275AH/master/data/0261Muslim/0261Muslim.Sahih/0261Muslim.Sahih.Shamela0001727-ara1.mARkdown";
julia> get(OpenITIDB, muslimsahih)┌ Info: Downloading │ source = "https://raw.githubusercontent.com/OpenITI/0275AH/master/data/0261Muslim/0261Muslim.Sahih/0261Muslim.Sahih.Shamela0001727-ara1.mARkdown" │ dest = "/home/runner/work/Kitab.jl/Kitab.jl/src/../db/0275AH/data/0261Muslim/0261Muslim.Sahih/0261Muslim.Sahih.Shamela0001727-ara1.mARkdown.txt" │ progress = 1.0 │ time_taken = "0.25 s" │ time_remaining = "0.0 s" │ average_speed = "18.597 MiB/s" │ downloaded = "4.705 MiB" │ remaining = "0 bytes" └ total = "4.705 MiB" "/home/runner/work/Kitab.jl/Kitab.jl/src/../db/0275AH/data/0261Muslim/0261Muslim.Sahih/0261Muslim.Sahih.Shamela0001727-ara1.mARkdown.txt"

Downloading Multiple URLs

To download multiple URLs, use an array of it.

julia> bukharisahih = "https://raw.githubusercontent.com/OpenITI/0275AH/master/data/0256Bukhari/0256Bukhari.Sahih/0256Bukhari.Sahih.JK000110-ara1.completed";
julia> bukhariducafa = "https://raw.githubusercontent.com/OpenITI/0275AH/master/data/0256Bukhari/0256Bukhari.Ducafa/0256Bukhari.Ducafa.Shamela0008632-ara1.mARkdown";
julia> get(OpenITIDB, [bukharisahih, bukhariducafa])┌ Info: Downloading │ source = "https://raw.githubusercontent.com/OpenITI/0275AH/master/data/0256Bukhari/0256Bukhari.Sahih/0256Bukhari.Sahih.JK000110-ara1.completed" │ dest = "/home/runner/work/Kitab.jl/Kitab.jl/src/../db/0275AH/data/0256Bukhari/0256Bukhari.Sahih/0256Bukhari.Sahih.JK000110-ara1.completed.txt" │ progress = 1.0 │ time_taken = "0.21 s" │ time_remaining = "0.0 s" │ average_speed = "24.619 MiB/s" │ downloaded = "5.268 MiB" │ remaining = "0 bytes" └ total = "5.268 MiB" ┌ Info: Downloading │ source = "https://raw.githubusercontent.com/OpenITI/0275AH/master/data/0256Bukhari/0256Bukhari.Ducafa/0256Bukhari.Ducafa.Shamela0008632-ara1.mARkdown" │ dest = "/home/runner/work/Kitab.jl/Kitab.jl/src/../db/0275AH/data/0256Bukhari/0256Bukhari.Ducafa/0256Bukhari.Ducafa.Shamela0008632-ara1.mARkdown.txt" │ progress = 1.0 │ time_taken = "0.0 s" │ time_remaining = "0.0 s" │ average_speed = "22.401 MiB/s" │ downloaded = "91.755 KiB" │ remaining = "0 bytes" └ total = "91.755 KiB"

Once downloaded, re-downloading will not proceed if the file already exists.

julia> get(OpenITIDB, [bukharisahih, bukhariducafa])[ Info: File 0256Bukhari.Sahih.JK000110-ara1.completed.txt already exists, no need to download. To force download, run delete!(OpenITIDB) to delete all the DB and download again.
[ Info: File 0256Bukhari.Ducafa.Shamela0008632-ara1.mARkdown.txt already exists, no need to download. To force download, run delete!(OpenITIDB) to delete all the DB and download again.

List downloaded OpenITI Data

To list the downloaded data, simply use the list function as follows:

julia> list(OpenITIDB)3×4 DataFrame
 Row │ AH      Author       Book                Version                        ⋯
     │ String  String       String              String                         ⋯
─────┼──────────────────────────────────────────────────────────────────────────
   1 │ 0275AH  0256Bukhari  0256Bukhari.Ducafa  0256Bukhari.Ducafa.Shamela0008 ⋯
   2 │ 0275AH  0256Bukhari  0256Bukhari.Sahih   0256Bukhari.Sahih.JK000110-ara
   3 │ 0275AH  0261Muslim   0261Muslim.Sahih    0261Muslim.Sahih.Shamela000172
                                                                1 column omitted

Load OpenITI Data

To load the data from the list of downloaded OpenITI data, we simply specify the row of the file from the list(OpenITIDB).

julia> load(OpenITIDB, 1)1557-element Vector{String}:
 "######OpenITI#"
 ""
 ""
 "#META# 000.SortField\t:: Shamela_0008632"
 "#META# 000.BookURI\t:: #0256.MuhammadBukhari.Ducafa"
 "#META# 010.AuthorAKA\t:: NODATA"
 "#META# 010.AuthorNAME\t:: محمد ب" ⋯ 72 bytes ⋯ "، أبو عبد الله (المتوفى: 256هـ)"
 "#META# 011.AuthorBORN\t:: NOTGIVEN"
 "#META# 011.AuthorDIED\t:: 256"
 "#META# 019.AuthorDIED\t:: NODATA"
 ⋮
 "# أبو ماجد الحنفي: عن ابن مسعود، ويقال العجلي، قال الحميدي: PageV01P143"
 "# عن ابن عيينة، قلت ليحيى الجابر: من أبو ماجد؟ قال: طار طير علينا،"
 "~~فحدثنا، وهو منكر الحديث."
 "# آخر كتاب الضعفاء."
 "### |PARATEXT|"
 "# فرغ من تعليقه الفقير إلى الله تعالى: عمر بن إبراهيم ms30 بن عبد الله بن عبد"
 "~~الله بن محمد بن العجمي الشافعي الحلبي1 عفا الله عنهم في بكرة نهار الأحد"
 "~~رابع عشرين جمادى الأول من سنة إحدى وثلاثين وسبعمائة من هجرة سيدنا محمد"
 "~~صلى الله عليه وصحبه، وسلم تسليما كثيرا. PageV01P144 ms31"
julia> load(OpenITIDB, 2)48686-element Vector{String}: "######OpenITI#" "" "" "#META# 000.SortField\t:: JK_000110" "#META# 000.BookURI\t:: #0256.MuhammadBukhari.Sahih" "#META# 010.AuthorAKA\t:: البخاري" "#META# 010.AuthorNAME\t:: محمد بن إسماعيل أبو عبدالله البخاري الجعفي" "#META# 011.AuthorBORN\t:: 194" "#META# 011.AuthorDIED\t:: 256" "#META# 019.AuthorDIED\t:: NODATA" ⋮ "~~من الدين كما يمرق السهم من الرمية ثم لا يعودون فيه حتى يعود السهم إلى" "~~فوقه قيل ما سيماهم قال سيماهم التحليق أو قال التسبيد PageV06P2748" "### || ( 58 باب ms1978 قول الله" ⋯ 58 bytes ⋯ " وأن أعمال بني آدم وقولهم يوزن " "# وقال مجاهد القسطاس العدل بالرومية ويقال القسط مصدر" "~~المقسط وهو العادل وأما القاسط فهو الجائر )" "# 7124 حدثنا أحمد بن إشكاب حدثنا محمد بن فضيل عن عمارة بن القعقاع عن أبي" "~~زرعة عن أبي هريرة رضي الله عنه قال قال النبي صلى الله عليه وسلم * كلمتان" "~~حبيبتان إلى الرحمن خفيفتان على اللسان ثقيلتان في الميزان سبحان الله" "~~وبحمده سبحان الله العظيم PageV06P2749 ms1979"
julia> load(OpenITIDB, 3)54111-element Vector{String}: "######OpenITI#" "#META# 001.AuthorNAME :: مسلم بن الحجاج أبو الحسن القشيري النيسابوري" "#META# 002.AuthorSHORTNAME :: مسلم" "#META# 003.AuthorSHORTNAMEtrans :: Muslim" "#META# 004.AuthorBORN :: 206" "#META# 005.MULTIPLEBIRTHDATES: False" "#META# 006.AuthorDIED :: 261" "#META# 007.MULTIPLEDEATHDATES :: False" "#META# 008.LEGALSCHOOL :: الشافعي" "#META# 009.LEGALSCHOOLtrans :: al-Shāfiʿī" ⋮ "# (3033) حدثنا عمرو بن زرارة، حدثنا هشيم، عن أبي هاشم، عن أبي مجلز، عن" "~~قيس بن عباد، قال: سمعت أبا ذر، يقسم قسما: إن {هذان خصمان اختصموا في" "~~ربهم} [الحج: 19] «إنها نزلت في الذين برزوا يوم بدر، حمزة، وعلي، وعبيدة" "~~بن الحارث، وعتبة، وشيبة ابنا ربيعة، والوليد بن عتبة»، PageV00P000" "### \$ 34 -" "# حدثنا أبو بكر بن أبي شيبة، حدثنا وكيع، ح وحدثني محمد بن المثنى، حدثنا" "~~عبد الرحمن، جميعا عن سفيان، عن أبي هاشم، عن أبي مجلز، عن قيس بن عباد،" "~~قال: سمعت أبا ذر يقسم لنزلت: {هذان خصمان} [الحج: 19] بمثل حديث هشيم" "~~PageV00P000 ms1663"

Delete OpenITI Local DB folder

To delete a particular file from the list of text books as returned by the list(OpenITIDB), simply use the row number of the file from the said list to delete as follows:

julia> list(OpenITIDB)3×4 DataFrame
 Row │ AH      Author       Book                Version                        ⋯
     │ String  String       String              String                         ⋯
─────┼──────────────────────────────────────────────────────────────────────────
   1 │ 0275AH  0256Bukhari  0256Bukhari.Ducafa  0256Bukhari.Ducafa.Shamela0008 ⋯
   2 │ 0275AH  0256Bukhari  0256Bukhari.Sahih   0256Bukhari.Sahih.JK000110-ara
   3 │ 0275AH  0261Muslim   0261Muslim.Sahih    0261Muslim.Sahih.Shamela000172
                                                                1 column omitted
julia> delete!(OpenITIDB, 1)[ Info: File successfully deleted.
julia> list(OpenITIDB)2×4 DataFrame Row │ AH Author Book Version ⋯ │ String String String String ⋯ ─────┼────────────────────────────────────────────────────────────────────────── 1 │ 0275AH 0256Bukhari 0256Bukhari.Sahih 0256Bukhari.Sahih.JK000110-ara1 ⋯ 2 │ 0275AH 0261Muslim 0261Muslim.Sahih 0261Muslim.Sahih.Shamela0001727 1 column omitted

Now to delete local DB folder, that is, deleting all files and folders containing the text books, simply run the following:

julia> delete!(OpenITIDB)[ Info: DB successfully deleted.