গুগল শিটস এপিআই সার্ভার কী ব্যবহার করার সময় "কলারের অনুমতি নেই" ফেরত দেয়


95

আমি এপিআই ম্যানেজারে একটি সার্ভার কী তৈরি করেছি এবং আমার ম্যাকের উপরেরটি কার্যকর করার চেষ্টা করেছি:

curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'

তবে এটিই ফিরে আসে:

{
 "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

আমি এখানে কি ভুল করছি?


4
কীটি জনসাধারণের ডেটা অ্যাক্সেসের জন্য, আপনি যা করছেন তা অনুমোদিত অ্যাক্সেসের প্রয়োজন।
দাইমটো

বেশিরভাগ ক্ষেত্রেই স্কোপের কিছু সমস্যা রয়েছে। স্ক্রিপ্ট দ্বারা কোন স্কোপগুলি প্রয়োজন তা পরীক্ষা করে যাচাই করুন।
dpkrai96

উত্তর:


131

এই সমস্যাটি সমাধান করতে, চেষ্টা করুন:

  1. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন: https://console.developers.google.com/iam-admin/serviceaccounts/
  2. বিকল্পগুলির মধ্যে, একটি কী তৈরি করুন: এই কীটি আপনার সাধারণ ক্লায়েন্ট_সেক্রেট.জসন - এটি একইভাবে ব্যবহার করুন
  3. পরিষেবা অ্যাকাউন্টের জন্য ভূমিকার মালিক করুন (সদস্যের নাম = পরিষেবা অ্যাকাউন্ট আইডি = পরিষেবা অ্যাকাউন্ট ইমেল প্রাক্তন: thomasapp@appname-201813.iam.gserviceaccount.com
  4. আপনার পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা = পরিষেবা অ্যাকাউন্ট আইডি অনুলিপি করুন
  5. আপনার ব্রাউজারে কেবল সেই গুগল শিটে যান যার সাথে আপনি ইন্টারঅ্যাক্ট করতে চান
  6. আপনার স্ক্রিনের উপরের ডানদিকে ভাগ করুন
  7. উন্নত সেটিংসে যান এবং এটি আপনার পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানার সাথে ভাগ করুন: thomasapp@appname-201813.iam.gserviceaccount.com

এটি আমার জন্য কাজ করেছে :)


4
এটি আমার জন্য কাজ করেছে। উপায় দ্বারা: গুগল ক্লাউড অ্যাডমিনে ... প্রকল্প> আইএএম এবং প্রশাসক> পরিষেবা অ্যাকাউন্টে যান .... আপনি যদি পরিষেবা অ্যাকাউন্ট সেটআপ করেন তবে আপনি প্রতিটি সম্পর্কিত অ্যাকাউন্টের জন্য একটি বিশেষ ইমেল দেখতে পাবেন। আপনি গুগল পত্রক এপিআই সক্ষম করেছেন তা নিশ্চিত করুন। আক্ষরিক অর্থে, আপনি কেবল Google শিট "শেয়ার" বোতাম থেকে পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানাটি ভাগ করেন।
জেসন এফ

4
হ্যাঁ ... কীটি হ'ল সার্ভিস অ্যাকাউন্ট ইমেলের সাথে দস্তাবেজটি ভাগ করে নেওয়া উচিত ....
ব্যবহারকারীর 102171

4
কী জাসন শংসাপত্রের জাসন থেকে খুব আলাদা যা আমি জাভা কুইকস্টার্ট গাইড (শিটস এপিআই এর জন্য) থেকে পেয়েছি। আমি কীভাবে এটি বাস্তবায়ন করব?
কার্ডিনাল - মনিকা পুনরায়

4
আপনি কিভাবে ক্লায়েন্ট গোপন ব্যবহার করবেন? পরিবর্তে কোনও পরিষেবা অ্যাকাউন্ট দিয়ে আপনি একটি API কী তৈরি করতে পারেন?
স্টিফেন ফিলিপস

তোমাকে অনেক ধন্যবাদ. এটি ডকুমেন্টেশন বা কিছুতে অন্তর্ভুক্ত করা উচিত।
আব্দুল মালিক

45

আমি জানি উত্তর দিতে কিছুটা দেরি হয়েছে তবে একই সমস্যা নিয়ে লড়াই করা অন্যান্য লোকদের জন্য। আপনার ড্রাইভে
কেবল শীটটির অনুমতিটি জনসমক্ষে পরিবর্তন করুন যাতে এটি API কলগুলির মাধ্যমে প্রমাণীকরণ ছাড়াই অ্যাক্সেস করা যায়।

অ্যাক্সেস পরিবর্তন করতে:

  1. গুগল ড্রাইভে শীট খুলুন
  2. উপরের ডানদিকে, ভাগ করুন ক্লিক করুন
  3. প্রম্পট উইন্ডোর নীচে, উন্নত ক্লিক করুন
  4. লিঙ্কযুক্ত জনসাধারণ বা লোকেদের অনুমতি পরিবর্তন করুন (কোনও সাইন ইন প্রয়োজন নেই)

প্রমাণীকরণ ছাড়াই শীট থেকে ডেটা আনার জন্য API অনুরোধটি প্রেরণ করুন।

দ্রষ্টব্য: যদি শিটটিতে সংবেদনশীল ডেটা থাকে তবে তা এটিকে সর্বজনীন করা নিরাপদ নয় বরং এটি প্রমাণীকৃত অ্যাক্সেস দিয়ে করুন।


37
এছাড়াও, আপনি এই ইমেলটি নির্দিষ্ট ইমেলের সাথে ভাগ করতে পারেন প্রাক্তন। আপনার পরিষেবা অ্যাকাউন্ট (প্রকল্প) ইমেল। "ক্লায়েন্ট_ইমেল": "XXXXX@n उत्तरी-স্কਕੇਟ- এক্সএক্সএক্সএক্সএক্স.আইইম.gserviceaccount.com", এটি আপনার স্ক্রিপ্টের দ্বারা শীটটি অ্যাক্সেস করার অনুমতি দেবে।
কিশান প্যাটেল

4
ধন্যবাদ ভাই. আপনার উল্লেখ করা পছন্দ করতে ডকুমেন্টেশনে কোনও লিখিত জিনিস নেই।
মৌলিক ডোডিয়া

4
সম্মত @ মৌলিকডোডিয়া। গুগল এপিআই ডক্স এটি এখানে বলেছে , তবে যে লোকেরা কেবল কোনও পাবলিক ওয়েবসাইটে ডেটা প্রদর্শন করতে এপিআই ব্যবহার করতে চায় তাদের পক্ষে এটি স্পষ্ট নয়। এই সমস্ত বিষয়ে আমি কীভাবে লেখার প্রক্রিয়া করছি। আমার কাজ শেষ হয়ে গেলে আমি আপনাকে এর একটি ডিএম প্রেরণ করব।
এডওয়ার্ড

অনেক অনেক বন্ধু @ ইউজার 3411192 ধন্যবাদ
মৌলিক

29

@ কিশনপ্যাটেলের মন্তব্যে মনোযোগ দেওয়ার বিষয়টি নিশ্চিত করুন:

এছাড়াও, আপনি এই ইমেলটি নির্দিষ্ট ইমেলের সাথে ভাগ করতে পারেন প্রাক্তন। আপনার পরিষেবা অ্যাকাউন্ট (প্রকল্প) ইমেল। "ক্লায়েন্ট_ইমেল": "XXXXX@n उत्तरी-স্কਕੇਟ- এক্সএক্সএক্সএক্সএক্স.আইইম.gserviceaccount.com", এটি আপনার স্ক্রিপ্টের দ্বারা শীটটি অ্যাক্সেস করার অনুমতি দেবে।


4

সবচেয়ে সহজ উপায় হ'ল গ্লকাউড ক্লায়েন্ট ব্যবহার করে ফিক্স করা। এখানে আরও ডক্স https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin

gcloud ইনস্টল করুন

sudo apt-get install google-cloud-sdk

তারপরে ফোন করুন

gcloud init

তারপরে আপনার সক্রিয় প্রকল্প এবং শংসাপত্রগুলি পরীক্ষা করুন

gcloud config configurations list

যদি এটি ঠিক না থাকে তবে নিশ্চিত হয়ে নিন যে আপনি সঠিক অ্যাকাউন্টের সাথে প্রমাণিত হয়েছেন:

gcloud auth list
* account 1
  account 2

যদি না হয় তবে প্রকল্পের অ্যাকাউন্টে পরিবর্তন করুন:

gcloud config set account `ACCOUNT`

অ্যাকাউন্টের উপর নির্ভর করে, প্রকল্পের তালিকাটি পৃথক হবে:

gcloud projects list

- project 1
- project 2...

উদ্দিষ্ট প্রকল্পে স্যুইচ করুন:

gcloud config set project `PROJECT NAME`

তারপরে অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রগুলি তৈরি করুন gcloud auth application-default loginএবং তারপরে গুগল-ক্লাউড স্বয়ংক্রিয়ভাবে এই জাতীয় শংসাপত্রগুলি সনাক্ত করবে।


0

আমার 10 সেন্ট ... জাভা ব্যবহার করে শিটটি পড়ার একটি সহজ উদাহরণ ।

    private Credential getCredentials() throws IOException {
            final InputStream accessKey = new ByteArrayInputStream("<credential json>");
            final GoogleCredential credential = GoogleCredential.fromStream(accessKey)
                    .createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS_READONLY));
            return credential;
        }

    private HttpTransport httpTransport() {
            try {
                return GoogleNetHttpTransport.newTrustedTransport();
            } catch (GeneralSecurityException | IOException e) {
                throw new SpreadSheetServiceException(e);
            }
        }


    Sheets service = new Sheets.Builder(httpTransport(), JSON_FACTORY, getCredentials())
                    .setApplicationName("app-name")
                    .build();
            ValueRange response = service.spreadsheets().values()
                    .get("<spread_sheet_id>", "A1:A")
                    .execute();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.