پاورشل برای برنامهنویسان
@programming_tipsدرسنامه: نمونه کاربردی برای برنامهنویسها – گرفتن دیتا از GitHub API
در این درسنامه یک مثال عملی برای برنامهنویسها ارائه میکنیم که نشان میدهد چگونه میتوان از PowerShell برای گرفتن داده از یک API واقعی استفاده کرد. به عنوان مثال، GitHub یک API عمومی ارائه میدهد که اطلاعات کاربران، ریپازیتوریها و فعالیتها را در قالب JSON برمیگرداند. این درسنامه نشان میدهد چطور میتوان این دادهها را دریافت، پردازش و ذخیره کرد.
۱. معرفی سناریو
فرض کن میخواهی اطلاعات یک کاربر GitHub (مثل تعداد ریپازیتوریها، نام ریپازیتوریها و تاریخ آخرین فعالیتها) را به صورت خودکار جمعآوری کنی و برای تحلیل یا گزارشگیری استفاده کنی.
ابزار اصلی ما در PowerShell برای این کار Invoke-RestMethod است.
۲. گرفتن اطلاعات کاربر
ابتدا اطلاعات یک کاربر خاص را دریافت میکنیم:
$username = "octocat" $uri = "https://api.github.com/users/$username" $response = Invoke-RestMethod -Uri $uri
در اینجا $response یک شیء PowerShell است و میتوانیم به ویژگیهای آن دسترسی داشته باشیم:
$response.login # نام کاربر $response.id # شناسه کاربر $response.public_repos # تعداد ریپازیتوریهای عمومی $response.followers # تعداد فالوورها
۳. گرفتن لیست ریپازیتوریها
برای مشاهده تمام ریپازیتوریهای عمومی کاربر، باید از endpoint مربوطه استفاده کنیم:
$reposUri = "https://api.github.com/users/$username/repos" $repos = Invoke-RestMethod -Uri $reposUri
حالا $repos یک آرایه از اشیاء است که هر شیء یک ریپازیتوری را نمایش میدهد. میتوانیم اطلاعات مهم را استخراج کنیم:
foreach ($repo in $repos) {
Write-Host "Repository: $($repo.name), Stars: $($repo.stargazers_count), Last Updated: $($repo.updated_at)"
}
۴. فیلتر کردن دادهها
فرض کن فقط میخواهیم ریپازیتوریهایی که بیشتر از 50 ستاره دارند را ببینیم:
$popularRepos = $repos | Where-Object { $_.stargazers_count -gt 50 }
foreach ($repo in $popularRepos) {
Write-Host "Popular Repo: $($repo.name), Stars: $($repo.stargazers_count)"
}
۵. ذخیره دادهها در CSV یا JSON
برای تحلیلهای بعدی میتوانیم دادهها را در فایل ذخیره کنیم:
ذخیره به CSV:
$repos | Select-Object name, stargazers_count, updated_at | Export-Csv "C:\Temp\github_repos.csv" -NoTypeInformation
ذخیره به JSON:
$repos | ConvertTo-Json | Out-File "C:\Temp\github_repos.json"
با این کار میتوان دادهها را به سایر ابزارها مثل Excel، Python یا Power BI منتقل کرد.
۶. استفاده از Header برای محدودیت API
گیتهاب برای تعداد درخواستها محدودیت دارد و برخی دادهها نیاز به توکن دارند. میتوان با اضافه کردن هدر Authorization درخواست را امنتر کرد:
$token = "ghp_yourGitHubTokenHere"
$headers = @{ Authorization = "token $token" }
$repos = Invoke-RestMethod -Uri $reposUri -Headers $headers
این کار مخصوصاً وقتی میخواهی اطلاعات خصوصی یا تعداد زیادی درخواست بگیری ضروری است.
۷. ترکیب با Automation
میتوان این اسکریپت را با یک اسکریپت زمانبندی شده ترکیب کرد تا هر روز اطلاعات جدید کاربران یا ریپازیتوریها را دریافت کند:
$today = Get-Date -Format "yyyyMMdd" $repos | Select-Object name, stargazers_count, updated_at | Export-Csv "C:\Temp\github_repos_$today.csv" -NoTypeInformation
جمعبندی
با استفاده از PowerShell و Invoke-RestMethod میتوان به راحتی:
- دادههای کاربر یا ریپازیتوریها را از GitHub API گرفت،
- دادهها را فیلتر و پردازش کرد،
- و آنها را در فرمت CSV یا JSON ذخیره نمود.
این نمونه عملی نشان میدهد که چطور PowerShell میتواند برای توسعهدهندگان و برنامهنویسان، جمعآوری و تحلیل داده از APIها را ساده و خودکار کند.
با این تکنیکها میتوان تقریباً به هر API عمومی یا خصوصی دسترسی پیدا کرد و دادهها را مستقیماً در اسکریپتها و پروژههای PowerShell استفاده نمود.