واحد جنایی کوئرا که فعالیت خودش را از سال ۱۳۹۹ آغاز کرده بود، فیلمی از کارآگاه فرهاد -یکی از اولین کارآگاههای کوئرا- دریافت کرده است. در این فیلم فرهاد توسط یک باند مافیایی محاصره شده است و از کوئرا درخواست کمک کرده است. فرهاد به سرنخهای مهمی از عملیاتهای این باند مافیایی دست پیدا کرده است و آنها را داخل یکی از سرورهای امن کوئرا و با چند پیچیدگی امنیتی آپلود کرده است. باند مافیایی که از این ماجرا بسیار عصبانی شده بود، فرهاد را به قتل رساند! حال واحد جنایی کوئرا به کارآگاه کیان و کارآگاه آدرینا ماموریت داده است تا دادههایی که فرهاد بر روی سرور قرار داده است را رمزگشایی کنند. از آنجایی که فرهاد چندین لایه امنیتی را بر روی سرور تنظیم کرده است، آنها به کمک شما برای پیدا کردن سرنخها نیاز دارند.
کیان و آدرینا کلاسی به نام Detective
را طراحی کردند که دارای توابع زیر هست:
login
این تابع با دریافت username
و password
و URL
صفحه ورود، وظیفه احراز هویت کاربران را به عهده دارد. در صورتی که عملیات احراز هویت موفقیت آمیز باشد، یک فایل JSON
به فرمت زیر برگردانده میشود:
از آنجایی که token
و upload_url
محرمانه هستند؛ لازم هست که شما یک دیکشنری تنها با دو کلید full_name
و email
برگردانید.
full_name
یک کاربر نام و نام خانوادگی او است که با یک اسپیس از هم جدا شدهاند.و در صورتی که عملیات احراز هویت موفقیت آمیز نبود، باید یک Exception
با پیغام زیر پرتاب کنید:
POST
انجام شوند.upload_clues
سعید و مهدی که موازی با فرهاد در حال کار بر روی این پرونده بودند، مدارکی را جمعآوری و در پوشهای به نام secrets
در کنار فایل کلاینت شما قرار دادند. شما باید تمامی این مدارک را پیدا کرده و از طریق متد PUT
و فیلد uploaded_files
داخل آدرسی که در مرحله قبل دریافت کردهاید در سرور آپلود کنید.
در نهایت، سرور یک فایل JSON
که شامل کلیدهای detail
و download_url
هست را به شما برمیگرداند. از مقدار download_url
برای قسمت بعدی سوال استفاده کنید و مقدار detail
را برای ما برگردانید!
html_scraper
تبریک! شما به اسناد فرهاد دسترسی پیدا کردید. اما عجله نکنید! این تازه اول راه است. فرهاد که هیچوقت نمیخواست باند مافیا به اسناد دست پیدا کند، آنها را در مکانهای مختلفی قرار داد و لینکهایش را در صفحه HTML
ای مخفی کرد. شما در این تابع با استفاده از متد GET
و آدرس صفحهای که در مرحله قبل دریافت کردهاید، میتوانید این صفحه HTML
را دانلود کنید. حال، تمامی لینکهای آن و عنوانهایش را پیدا کنید و در دیکشنریای به تیم جنایی کوئرا برگردانید. کلید دیکشنری شما باید عنوان لینک و مقدار آن آدرس لینک باشد.
در پاسخ ارسالی خود میتوانید از هر کتابخانهای که لازم میدانید استفاده کنید. اما در فایل ارسالی خود، علاوه بر فایل solution.py
که حاوی راهحل شما است، باید فایلی با نام python_requirements.txt
نیز موجود باشد که در آن نام کتابخانههای مورد نیاز و شمارهٔ نسخهٔ آنها به فرمت زیر در آن موجود باشد:
ساختار فایل .zip
ارسالی شما باید به صورت زیر باشد: