Uygulamalarımızda Google Drive Api özelliklerini kullanalım.

Google Drive gittiğiniz her yere sunumlarınızı, raporlarınızı, dökümanlarınızı ve resimlerinizi götürmenizi sağlayan bir online depolama servisidir. Bu servis başlangıç seviyesinde 15gb a kadar alanı ücretsiz olarak kullanabilirsiniz. Google drive ı kullanabilmeniz için bir gmail hesabına ihtiyacınız bulunuyor. Bizler bu yazımızda google drive da oluşturduğumuz alanı google api lerini kullanarak uygulamalarımız ile nasıl entegre edebileceğimizi göreceğiz.

Google Drive ı uygulamalarımızda kullanabilmemiz için öncelikle Google Api Console dan Drive Api özelliğini aktive etmemiz gerekmektedir. Bu özelliği aktive edebilmek için aşağıdaki adımları izleyebilirsiniz. 

  1. Adım Drive API sini aktive etme. 

    • Hizmeti aktive edebilmek için sihirbazı kullanarak yeni bir proje oluşturabilir veya varolan bir projenizi seçerek Devam (Continue) tuşuna basıp gelen ekranda Kimlik bilgilerine git (Go to credentials) butonuna basınız.
    • Projenize kimlik bilgisi ekleyin sayfasında iptal butonuna basın. 
    • Ekranın üst kısmındaki OAuth izin ekranı (OAuth consent screen) nı seçin. E-Posta adresi ve bu api yi kullanacağınız projenizin adını girip Kaydet butonuna basın.
    • Kimlik bilgileri (Credentials) sekmesine geçip Kimlik bilgilerini oluştur (Create credentials) butonuna tıklayın ve OAuth istemci kimliği (OAuth client ID) seçin.
    • Gelen ekranda oluşturacağımız uygulama türlerinden Diğer (Other) seçeneğini seçip bir isim belirledikten sonra Oluştur (Create) butonuna tıklayın.
    • Tamam butonuna tıklayarak gelen diyalog penceresini kapatın. 
    • Oluşturduğumuz OAuth istemci kimliğini bilgisayarımıza download edelim
    • Json formatında indirdiğimiz dosyanın adını client_secret.json olarak değiştirelim. 
  2. Projemizi oluşturalım. 

    • Visual Studio içerisinde C# programlama dili ile bir Console uygulaması oluşturalım. 
    • Nuget Package Manager Console kısmından Google.Apis.Drive.v3 package ini uygulamamıza install edelim.
      PM> Install-Package Google.Apis.Drive.v3
    • Json olarak indirdiğimiz client_secret.json dosyasını Visual Studio da oluşturduğumuz projemizin içerisine kopyalayalım. 
    • client_secret.json dosyasını seçip Properties penceresinden Copy to Output Directory kısmından Copy always özelliğini seçelim. 

Visual Studio da oluşturduğumuz consol uygulamasının Program.cs class ında kullanacağımız kütüphaneleri ekleyelim. 

using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

Uygulamamız aşağıdaki fonksiyonlardan oluşacak. 

  • GetMenu : Uygulamada farklı işlemleri yapabileceğimiz bir menü ekranı.
  • Login: Google OAuth2 ile login olacağımız bir fonksiyon. 
  • CreateDirectory : Google Drive da klasör oluşturabileceğimiz fonksiyon. 
  • GetFiles : Google Drive daki dosyalarımızın listesini alabileceğimiz fonksiyon. 
  • UploadFiles: Bilgisayarımızdaki bir dosyayı upload edebileceğimiz fonksiyon. 
  • DeleteFile : Google Drive daki bir dosyayı silebileceğimiz fonksiyon. 

GetMenu: 

public static int GetMenu()
{
    Console.Clear();
    Console.WriteLine("----------------------------------------");
    Console.WriteLine("Dosya İşlemleri.");
    Console.WriteLine("0. Login. ");
    Console.WriteLine("1. Klasör Oluştur. ");
    Console.WriteLine("2. Dosya Listesi.");
    Console.WriteLine("3. Dosya Yükle. ");
    Console.WriteLine("4. Dosya Sil");
    Console.WriteLine("9. Çıkış. ");
    Console.WriteLine("----------------------------------------");
    Char vKey = new char();
    int inputKey = 0;
    bool isValidKey = false;
    do
    {
        vKey = Console.ReadKey().KeyChar;
        isValidKey = int.TryParse(vKey.ToString(), out inputKey);
    } while (!isValidKey);
    return inputKey;
}

Login:

static bool Login()
{
    UserCredential credential;

    using (var stream =
        new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
    {
        string credPath = System.Environment.GetFolderPath(
            System.Environment.SpecialFolder.Personal);
        credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");

        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore("Drive.Auth.Store")).Result;
        Console.WriteLine("Kaydedildi.: " + credPath);
    }

    // Create Drive API service.
    service = new DriveService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return true; 
}

CreateDirectory: 

static bool CreateDirectory()
{
    Console.Clear();
    Console.WriteLine("Klasör Adı Giriniz : ");
    string DirectoryName = Console.ReadLine();
    var body = new Google.Apis.Drive.v3.Data.File();
    body.Name = DirectoryName;
    body.MimeType = "application/vnd.google-apps.folder";
    try
    {
        var request = service.Files.Create(body);
        request.Fields = "id";
        var _FF = request.Execute();
    }
    catch (Exception e)
    {
        Console.WriteLine("Hata Oluştu. : " + e.Message);
    }
    return true;
}

GetFiles:

static void GetFiles()
{ 
            
    // Define parameters of request.
    FilesResource.ListRequest listRequest = service.Files.List();
    listRequest.PageSize = 10;
    listRequest.Fields = "nextPageToken, files(id, name)";

    // List files.
    IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute()
        .Files;
    Console.Clear();
    Console.WriteLine("Dosyalar:");
    if (files != null && files.Count > 0)
    {
        foreach (var file in files)
        {
            Console.WriteLine("{0} ({1}) - {2}", file.Name, file.Id);
        }
    }
    else
    {
        Console.WriteLine("Dosya bulunamadı.");
    }
    Console.ReadKey();
}

UploadFiles:

static bool UploadFiles()
{
    Console.Clear();
    Console.WriteLine("Yüklenecek Dosyanın path ini ve adını yazınız.");
    string FullFileName = Console.ReadLine();
    Console.WriteLine("Yüklenecek Dosyanın adını yazınız.");
    string FileName = Console.ReadLine();
    if (System.IO.File.Exists(FullFileName))
    {
        var fileMetaData = new Google.Apis.Drive.v3.Data.File();
        fileMetaData.Name = FileName;
        Google.Apis.Drive.v3.FilesResource.CreateMediaUpload request;
        using (var stream = new System.IO.FileStream(FullFileName, FileMode.Open))
        {
            request = service.Files.Create(fileMetaData, stream, "image/jpeg");
            request.Fields = "id";
            request.Upload();
            var fileId = request.ResponseBody;
        }
    }
    return true;
}

DeleteFile:

static void DeleteFiles()
{
    Console.Clear();
    Console.WriteLine("Silmek istediğiniz dosyanın Id sini yazınız.");
    string fileId = Console.ReadLine();
    FilesResource.DeleteRequest deleteRequest = service.Files.Delete(fileId);
    deleteRequest.Execute();
}

Program.cs Main Fonksiyonu: 

static string[] Scopes = new[] { DriveService.Scope.Drive, DriveService.Scope.DriveFile };
static string ApplicationName = "OAuthWebFilePermission"; // Olusturulan Uygulama Adı
static DriveService service;
static void Main(string[] args)
{
    int vKey = 0;
    Login();
    do
    {
        vKey = GetMenu();
        switch (vKey)
        {
            case 0:
                Login();
                break;
            case 1:
                CreateDirectory();
                break;
            case 2:
                GetFiles();
                break;
            case 3:
                UploadFiles();
                break;
            case 4:
                DeleteFiles();
                break;
            default:
                break;
        }

    } while (vKey != 9);
}

 

İlgili Makaleler

Bu yazıya 3 yorum yapılmış.

  • Giriş Bilgileri Ne kadar kayıtlı kalıyor -

    Merhabalar ilk olarak çok güzel bir yazı olmuş baya faydalı. Bir sorum var bu kodlarla ilk başta google hesabı girişi istiyor sonraki girişlerde istemiyor bu giriş verileri kendiğinden silinebilir mi veya kalıcı bir giriş sağlanabilir mi? yardım olabilirseniz sevinirim

  • Bu apinin üründe kullanılması -

    Kodların hiç bir yerinde gmail uzantılı bir adres ve şifre görünmüyor. Demek oluyorki kişi sadece kendi drive ına ulaşabilecek. Acaba bu api ile gmail eposta ve şifresi bildirilerek herhangi bir drive a bağlanabilir mi?

  • Yazı -

    Tebrikler çok güzel bir yazı olmuş.

Yorum Gönder