هل من الممكن الحصول على محتويات جدول بيانات مستندات Google من داخل أداة Gmail؟

StackOverflow https://stackoverflow.com/questions/3601477

سؤال

هذا ما كنت أحسبه حتى الآن:

للحصول على محتوى جدول البيانات "OD6" مع المعرف "0AJ3x4N7SOPMRDFA2VMJuampiudfzDLAWRUWTSEJACMC" عليك أن تتماسك هذا عنوان URL:https://spreadsheets.google.com/feeds/cells/0aj3x4n7sopmrdfa2vmjuampiudfzdlawruwtsejacmc/od6/private/full

(نرى API)

هذا يعمل بشكل جيد ، إذا وضعت عنوان URL في متصفحي (لأنني قمت بتسجيل الدخول إلى GDOCs ويتم تعيين ملفات تعريف الارتباط).

إذا أردت الوصول إلى عنوان URL أعلاه من داخل أداة Gmail الخاصة بي ، أعتقد أن لدي خياران.

  1. قم بتحميله عبر Ajax
  2. قم بتحميله مباشرة في PHP الذي يولد الأداة

مع النهج الأول ، واجهت المشكلة ، أن ملفات تعريف الارتباط غير معروفة في مكالمة Ajax (أعتقد أن هذا بسبب المجالات المختلفة المعنية).

معلومات الخلفية: تعمل أدوات PHP-SPRIPT على مضيفتي (https://sslsites.de) ، يتم تحميل هذه الأداة بواسطة Gmail وتقديمها إلى نوع من البروكسي (وبالتالي فإن مضيف الأداة الخاصة بي داخل Iframe هو http://kipb0cvv7sa9gunc3o5ei57sr1eoem5-a-gm-opensocial.googleusercontent.com/gadgets). حيث يكون عنوان URL في شريط الموقع (الوالد iframes) https://mail.google.com/mail

لذا فإنه يقوم بتقويم مكالمة Ajax من هذا الإيفر لا يمكن إرسال ملفات تعريف الارتباط إلى المجال https://spreadsheets.google.com . حق؟ الاستجابة فارغة.

ثم جربت النهج الثاني. إذا أردت الوصول إلى جدول البيانات من PHP سأحتاج إلى OAuth. الذي يعمل بشكل جيد مع هذا الرمز:

<?php
function make_api_call($url, $token) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $curlheader[0] = sprintf("Authorization: AuthSub token=\"%s\"/n", $token);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $curlheader);
  $output = curl_exec($ch);
  curl_close($ch);
  return $output;
}

function get_session_token($onetimetoken) {
  $output = make_api_call("https://www.google.com/accounts/AuthSubSessionToken", $onetimetoken);
  if (preg_match("/Token=(.*)/", $output, $matches)) $sessiontoken = $matches[1];
  else {
    echo "Error authenticating with Google.";
    exit;
  }
  return $sessiontoken;
}

if ($_GET['token'] and !$_COOKIE['token']) {
  $_COOKIE['token'] = get_session_token($_GET['token']);
  setcookie("token", $_COOKIE['token']);
}

if ($_COOKIE['token']) {
  $accountxml = make_api_call("https://spreadsheets.google.com/feeds/cells/tP6VbnjjHP1svP0EL-HBZrg/od6/private/full", $_COOKIE['token']);
  print_r($accountxml);
}
?>
<a href="https://www.google.com/accounts/AuthSubRequest?scope=https%3A%2F%2Fspreadsheets.google.com%2Ffeeds%2F&session=1&secure=0&next=https%3A%2F%2Fsslsites.de%2Fknox.orgapage.de%2Fdocget.php" target="_blank">Sign in</a>

لكن مرة أخرى ، لدي مشكلة مع المجالات هنا. يعمل هذا الرمز بشكل جيد https://sslsites.de . لكن من Gmail لدي المشكلة ، لا يمكنني تمرير $ _cookie ['token']. إذا قمت بالتسجيل https://sslsites.de مع Oauth ، لن يمر متصفحي ملف تعريف الارتباط عبر وكيل Gmails Gadget. إذا قمت بتسجيل الوكيل (http://kipb0cvv7sa9gunc3o5ei57sr1eoem5-a-gm-opensocial.googleusercontent.com/gadgets) من أجل Oauth ملف تعريف الارتباط موجود ، لكن نص PHP الخاص بي لا يعرف ذلك أيضًا.

لذلك ، هل هناك أي طريقة يمكنني من خلالها تمرير ملف تعريف الارتباط بالوكالة (التي تتخلى عن اللحامات السوداء بالنسبة لي ، لأنني لا أستطيع العثور على أي وثائق عليه)؟

أم أن هناك واجهات برمجة التطبيقات الأخرى للوصول إلى جداول البيانات؟ جداول البيانات التي أتحدث عنها عامة للجميع ، لذلك لا أتوقع أن يحتاج المرء إلى المصادقة.

لكن جدول البيانات عام:https://spreadsheets.google.com/ccc؟key=0aj3x4n7sopmrdfa2vmjuampiudfzdlawruwtsejacmc&hl=en&authkey=cj2ppjsp

ولكن ليس استدعاء API للبيانات إلى نفس:https://spreadsheets.google.com/feeds/cells/0aj3x4n7sopmrdfa2vmjuampiudfzdlawruwtsejacmc/od6/private/full

هل كانت مفيدة؟

المحلول

لقد اكتشفت كيفية استخدام OAUTH داخل الأدوات.

عليك أن تحددها داخل الأدوات XML ، مثل هذا:

<OAuth>
  <Service name="google">
    <Access url="https://www.google.com/accounts/OAuthGetAccessToken" method="GET" />
    <Request url="https://www.google.com/accounts/OAuthGetRequestToken?scope=https://spreadsheets.google.com/feeds/" method="GET" />
    <Authorization url="https://www.google.com/accounts/OAuthAuthorizeToken?oauth_callback=http://oauth.gmodules.com/gadgets/oauthcallback" />
  </Service>
</OAuth>

ثم ستتمكن من الاستعلام عن خلاصات جدول البيانات:

function initSSData() {
  var params = {};
  params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
  params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.OAUTH;
  params[gadgets.io.RequestParameters.OAUTH_SERVICE_NAME] = "google";
  params[gadgets.io.RequestParameters.OAUTH_USE_TOKEN] = "always";
  params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;

  gadgets.io.makeRequest("https://spreadsheets.google.com/feeds/spreadsheets/private/full?title=GIdea&alt=json", function(response) {
    // Show sign in
    if (response.oauthApprovalUrl) {
      var popup = shindig.oauth.popup({
        destination: response.oauthApprovalUrl,
        windowOptions: null,
        onOpen: function() { document.getElementById('approval').style.display = "none"; document.getElementById('waiting').style.display = "block"; },
        onClose: function() { initSSData(); }
      });
      var personalize = document.getElementById('personalize');
      personalize.onclick = popup.createOpenerOnClick();
      var approvaldone = document.getElementById('approvaldone');
      approvaldone.onclick = popup.createApprovedOnClick();

      document.getElementById('approval').style.display = "block";

    // Show result
    } else if (response.data) {
      // Access the spreadsheet with response.data
    }
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top