প্রকল্প সম্পর্কে

# CasCap.GooglePhotosCli Google Photos এর একটি অনানুষ্ঠানিক কমান্ড লাইন ইন্টারফেস, `googlephotos` নামক .NET গ্লোবাল টুল হিসেবে বিতরিত, যা Google Photos অ্যাকাউন্টে মিডিয়া আপলোড এবং অ্যালবাম সংগঠিত করতে ব্যবহৃত হয়। ## গুরুত্বপূর্ণ: Google ৩১ মার্চ ২০২৫ তারিখে Photos API পরিবর্তন করেছে Google যেকোনো তৃতীয়-পক্ষের অ্যাপ্লিকেশন ব্যবহারকারীর Google Photos লাইব্রেরি দিয়ে যা করতে পারে তা মৌলিকভাবে কমাতে চলেছে। এই টুল এবং এর নিচে থাকা [CasCap.Api.GooglePhotos](https://github.com/f2calv/CasCap.Api.GooglePhotos) লাইব্রেরি সেই পরিবর্তন দ্বারা সীমাবদ্ধ: - Library API শুধুমাত্র **এই টুলের নিজস্ব OAuth ক্লায়েন্ট দ্বারা তৈরি** অ্যালবাম এবং মিডিয়া আইটেম দেখতে পারে। আপনার অ্যাকাউন্টে ইতিমধ্যে থাকা সবকিছু এর জন্য অদৃশ্য। - পুরো লাইব্রেরি পড়া এবং ফলস্বরূপ পুরো-লাইব্রেরি ডুপ্লিকেট সনাক্তকরণ ও ব্যাকআপ আর সম্ভব নয়। - লাইব্রেরি API শেয়ারিং এবং শেয়ার্ড-অ্যালবাম অপারেশন সম্পূর্ণ বন্ধ করে দেওয়া হয়েছে। - বিদ্যমান ব্যবহারকারীর মিডিয়া কেবল Picker API এর মাধ্যমে পৌঁছানো যায়, যা ব্যবহারকারীকে ইন্টারেক্টিভভাবে আইটেম নির্বাচন করতে হবে, প্রতি সেশনে একবার করে। Version 1.0 এ পুরো-লাইব্রেরি অ্যাক্সেসের ওপর নির্ভরশীল কমান্ডগুলো সরানো হয়েছে। দেখুন [Google's API update](https://developers.google.com/photos/support/updates)। ### Version 1.0 এ বাদ দেওয়া হয়েছে | কমান্ড | কারণ | | --- | --- | | `mediaitems duplicates` | ডুপ্লিকেট সনাক্তকরণের জন্য পুরো লাইব্রেরি পড়া প্রয়োজন। | | `sync`, `albums sync` | লাইব্রেরি-ব্যাপী মেটাডেটা ক্যাশ করার কোনো অবশিষ্ট নেই। | | ইন্টারেক্টিভ ক্রেডেনশিয়াল prompted | ক্রেডেনশিয়াল এখন কনফিগারেশন থেকে আসে; দেখুন [Configuration](#configuration)। | ## ইনস্টলেশন টুলটি একটি [.NET global tool](https://learn.microsoft.com/dotnet/core/tools/global-tools) হিসেবে বিতরিত: ```powershell dotnet tool update --global googlephotos ``` এটির জন্য [.NET 10 রানটাইম](https://dotnet.microsoft.com/download/dotnet/10.0) প্রয়োজন। ## Google Cloud সেটআপ 1. [Google Cloud console](https://console.cloud.google.com/) তে একটি প্রজেক্ট তৈরি করুন। 2. **APIs & Services > Library** খুলুন এবং **Google Photos Library API** সক্রিয় করুন। 3. OAuth consent screen কনফিগার করুন এবং একটি **OAuth client ID** তৈরি করুন Desktop app ধরনের। 4. Client ID এবং client secret নোট করুন; তারা নিচের কনফিগারেশনের মাধ্যমে সরবরাহ করা হবে। সম্পূর্ণ সেটআপ নির্দেশিকা [লাইব্রেরি ডকুমেন্টেশনে](https://github.com/f2calv/CasCap.Api.GooglePhotos#google-cloud-setup) পাওয়া যায়। ## কনফিগারেশন টুলটি `CasCap:GooglePhotosOptions` সেকশন বাঁধানো করে, যা ক্রমবর্ধমান অগ্রাধিকারে নিম্নলিখিত উৎস থেকে আসে: শিপড `appsettings.json`, কারেন্ট ওয়ার্কিং ডিরেক্টরিতে `appsettings.json`, .NET User Secrets, এবং পরিবেশ ভেরিয়েবল। যেহেতু একটি global tool একটি রিড-অনলি স্টোরে ইনস্টল করে, তাই User Secrets অথবা পরিবেশ ভেরিয়েবল ব্যবহার করা প্রায়োগিক: ```powershell $env:CasCap__GooglePhotosOptions__User = "your.email@example.com" $env:CasCap__GooglePhotosOptions__ClientId = "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com" $env:CasCap__GooglePhotosOptions__ClientSecret = "your-client-secret" ``` অথবা যেখানে টুলটি চালান তার পাশে একটি `appsettings.json`: ```json { "CasCap": { "GooglePhotosOptions": { "User": "your.email@example.com", "ClientId": "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com", "ClientSecret": "your-client-secret", "Scopes": [ "AppendOnly", "ReadOnlyAppCreatedData", "EditAppCreatedData" ] } } } ``` | Scope | প্রয়োজন | | --- | --- | | `AppendOnly` | `mediaitems upload`, `albums add` | | `ReadOnlyAppCreatedData` | `albums list`, `albums download`, `mediaitems list` | | `EditAppCreatedData` | আপলোড করা মিডিয়া আইটেম অ্যালবামে যুক্ত করতে | কখনোই ক্লায়েন্ট সিক্রেট কমিট করবেন না। OAuth গ্র্যান্ট নিজেই `%APPDATA%/googlephotos/auth` (অথবা প্ল্যাটফর্মের সমতুল্য) তে `Google.Apis.Auth` দ্বারা ক্যাশ করা থাকে এবং `googlephotos logout` দিয়ে মুছে ফেলা যায়। ## ব্যবহার প্রতিটি কমান্ডের কন্টেক্সট-সংবেদনশীল সাহায্য আছে: ```powershell googlephotos --help googlephotos albums --help ``` ### অ্যালবাম ```powershell # তালিকাভুক্ত করুন এই টুল দ্বারা তৈরি অ্যালবাম googlephotos albums list # শুধুমাত্র সেই অ্যালবাম দেখান যা অন্য অ্যালবামের সাথে শিরোনাম শেয়ার করে googlephotos albums list --duplicates # একটি খালি অ্যালবাম তৈরি করুন googlephotos albums add -t "my album title" # অ্যালবামের মিডিয়া আইটেম ডাউনলোড করুন googlephotos albums download -t "my album title" -o ./download # রিসাইজড, ক্রপ করা, EXIF সংরক্ষণকারী কপি ডাউনলোড করুন googlephotos albums download -t "my album title" -o ./download --maxheight 100 --crop --exif --overwrite ``` ### মিডিয়া আইটেম ```powershell # তালিকাভুক্ত করুন এই টুল দ্বারা তৈরি মিডিয়া আইটেম googlephotos mediaitems list # একটি ফোল্ডার গাছ আপলোড করুন googlephotos mediaitems upload -s ./photos # শুধুমাত্র JPEG আপলোড করুন, একটি নামযুক্ত অ্যালবামে, prompt ছাড়াই googlephotos mediaitems upload -s ./photos --pattern *.jpg -t "holiday 2026" -y # একটি ফোল্ডার গাছ আপলোড করুন, উপ-ফোল্ডার প্রতি একটি করে অ্যালবাম তৈরি করে googlephotos mediaitems upload -s ./photos --hierarchy ``` ### সাইন আউট ```powershell googlephotos logout ``` ## ডেভেলপমেন্ট ```powershell dotnet build CasCap.GooglePhotosCli.Debug.slnx dotnet test src/CasCap.GooglePhotosCli.Tests/CasCap.GooglePhotosCli.Tests.csproj ``` Debug সলিউশন `CasCap.Api.GooglePhotos` কে একটি লোকাল প্রজেক্ট রেফারেন্সের মাধ্যমে রিজলভ করে, তাই এটি আশা করে যে এই রেপোজিটরিটির পাশাপাশি ক্লোন করা থাকবে। Release সলিউশন প্রকাশিত NuGet প্যাকেজ ব্যবহার করে। ## মতামত এবং সমস্যা অনুগ্রহ করে [GitHub issues page](https://github.com/f2calv/CasCap.GooglePhotosCli/issues) তে যেকোনো কিছু উঠিয়ে ধরুন। ## লাইসেন্স CasCap.GooglePhotosCli এর কপিরাইট © 2020 [@f2calv](https://github.com/f2calv) এর [MIT license](LICENSE) অধীনে।