[PYTHON] Abrufen von Salesforce-Daten mithilfe der REST-API

Einführung

Nachdem Sie diesen Artikel bis zum Ende gelesen haben, können Sie:

Beispielcode

python_sfdc_get_user.py


sf = Salesforce(username=USERNAME, password=PASSWORD,
                security_token=SECURITY_TOKEN, sandbox=False)
res = sf.query(
    'SELECT Id, Name, LastLoginDate FROM User WHERE Name =\'nsuhara\'')
print(json.dumps(res, indent=4))

Ausführungsergebnis

python_result.json


{
    "totalSize": 1,
    "done": true,
    "records": [
        {
            "attributes": {
                "type": "User",
                "url": "/services/data/v38.0/sobjects/User/0056F000006StK9QAK"
            },
            "Id": "0056F000006StK9QAK",
            "Name": "nsuhara",
            "LastLoginDate": "2019-05-18T13:07:00.000+0000"
        }
    ]
}

Zum Thema passende Artikel

Ausführungsumgebung

Umgebung Ver. Note
macOS Mojave 10.14.4 OS
Salesforce Spring'19 SaaS
Python 3.7.3 Python
simple-salesforce 0.74.2 Python
requests 2.22.0 Python
Java 1.8.0_192 Java
httpclient 4.5.6 Java
json 20180813 Java
jackson-databind 2.9.8 Java

Quellcode

Ich denke, dass Sie Ihr Verständnis vertiefen können, indem Sie den Implementierungsinhalten und dem Quellcode tatsächlich folgen. Bitte benutzen Sie es auf jeden Fall.

GitHub

Vorbereitungen

Salesforce OAuth-Einstellungen

Einstellungen> Erstellen> Anwendungen> Verbundene Anwendungen> Klicken Sie auf "Neu"

Artikelname Wert einstellen
Name der verbundenen Anwendung Sample
API-Referenzname Sample
Kontakt E-mail [email protected]
Aktivieren Sie die OAuth-Einstellungen TRUE
Rückruf-URL https://sample.auth0.com/login/callback
Ausgewählter OAuth-Bereich Zugriff auf grundlegende Informationen
Webserver-Flussgeheimnis erforderlich TRUE
スクリーンショット 2018-12-19 23.42.27.png

`Bitte warten Sie 2-10 Minuten, bis die Änderungen auf dem Server wirksam werden, bevor Sie die verbundene Anwendung verwenden. ``

Parameterübersicht

Variablennamen Erläuterung Bemerkungen
HOST Production: login.salesforce.com, Sandbox: test.salesforce.com
CLIENT_ID Verbraucherschlüssel Referenz 1
CLIENT_SECRET Verbrauchergeheimnis Referenz 1
USERNAME Salesforce-Benutzername
PASSWORD Salesforce-Kennwort
SECURITY_TOKEN Salesforce-Sicherheitstoken Referenz 2
PASSWORD_AND_SECURITY_TOKEN Salesforce-Kennwort+Sicherheitstoken

** (Referenz 1) **

スクリーンショット 2018-12-20 0.29.33.png

** (Ref. 2) **

Sicherheitstoken können unter "Meine Einstellungen"> "Persönlich"> "Mein Sicherheitsgespräch zurücksetzen" erneut ausgestellt werden.

スクリーンショット 2018-12-20 0.43.24.png

Beispiel für ein Shell-Skript

shell_script_sfdc_get_user.sh


#!/bin/sh

export HOST='<Parameterreferenz>'
export CLIENT_ID='<Parameterreferenz>'
export CLIENT_SECRET='<Parameterreferenz>'
export USERNAME='<Parameterreferenz>'
export PASSWORD_AND_SECURITY_TOKEN='<Parameterreferenz>'

export INSTANCE_URL=`curl -s https://$HOST/services/oauth2/token -d "grant_type=password" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "username=$USERNAME" -d "password=$PASSWORD_AND_SECURITY_TOKEN" | awk 'BEGIN{FS="instance_url\":"}{print $2}' | awk 'BEGIN{FS=","}{print $1}' | sed -e 's/\"//g'`
export ACCESS_TOKEN=`curl -s https://$HOST/services/oauth2/token -d "grant_type=password" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "username=$USERNAME" -d "password=$PASSWORD_AND_SECURITY_TOKEN" | awk 'BEGIN{FS="access_token\":"}{print $2}' | awk 'BEGIN{FS=","}{print $1}' | sed -e 's/\"//g'`

export SOQL="SELECT+Id,Name,LastLoginDate+FROM+User+WHERE+Name='nsuhara'"

curl $INSTANCE_URL/services/data/v45.0/query?q=$SOQL -H "Authorization: OAuth $ACCESS_TOKEN" -H "X-PrettyPrint:1"

shell_script_result.json


{
    "totalSize": 1,
    "done": true,
    "records": [
        {
            "attributes": {
                "type": "User",
                "url": "/services/data/v45.0/sobjects/User/0056F000006StK9QAK"
            },
            "Id": "0056F000006StK9QAK",
            "Name": "nsuhara",
            "LastLoginDate": "2019-05-18T14:04:05.000+0000"
        }
    ]
}

Python-Beispiel

python_sfdc_get_user.py


import json

from simple_salesforce import Salesforce

USERNAME = '<Parameterreferenz>'
PASSWORD = '<Parameterreferenz>'
SECURITY_TOKEN = '<Parameterreferenz>'


def main():
    sf = Salesforce(username=USERNAME, password=PASSWORD,
                    security_token=SECURITY_TOKEN, sandbox=False)
    res = sf.query(
        'SELECT Id, Name, LastLoginDate FROM User WHERE Name =\'nsuhara\'')
    print(json.dumps(res, indent=4))


if __name__ == '__main__':
    main()

python_result.json


{
    "totalSize": 1,
    "done": true,
    "records": [
        {
            "attributes": {
                "type": "User",
                "url": "/services/data/v38.0/sobjects/User/0056F000006StK9QAK"
            },
            "Id": "0056F000006StK9QAK",
            "Name": "nsuhara",
            "LastLoginDate": "2019-05-18T14:06:19.000+0000"
        }
    ]
}

Java-Beispiel

java_App.java


package rest_api;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class App {
    static final String HOST = "<Parameterreferenz>";
    static final String CLIENT_ID = "<Parameterreferenz>";
    static final String CLIENT_SECRET = "<Parameterreferenz>";
    static final String USERNAME = "<Parameterreferenz>";
    static final String PASSWORD_AND_SECURITY_TOKEN = "<Parameterreferenz>";

    static final String GRANT_SERVICE = "/services/oauth2/token?grant_type=password";

    public static void main(String[] args) {
        String UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36";
        List<Header> headers = new ArrayList<Header>();
        headers.add(new BasicHeader("User-Agent", UA));

        HttpClient httpClient = HttpClientBuilder.create().setDefaultHeaders(headers).build();

        String loginURL = "https://" + HOST + GRANT_SERVICE + "&client_id=" + CLIENT_ID + "&client_secret="
                + CLIENT_SECRET + "&username=" + USERNAME + "&password=" + PASSWORD_AND_SECURITY_TOKEN;

        HttpPost httpPost = new HttpPost(loginURL);
        HttpResponse response = null;

        try {
            response = httpClient.execute(httpPost);
        } catch (ClientProtocolException cpException) {
            // Handle protocol exception
        } catch (IOException ioException) {
            // Handle system IO exception
        }

        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != HttpStatus.SC_OK) {
            System.out.println("Error authenticating to Force.com: " + statusCode);
            // Error is in EntityUtils.toString(response.getEntity())
            return;
        }

        String getResult = null;
        try {
            getResult = EntityUtils.toString(response.getEntity());
        } catch (IOException ioException) {
            // Handle system IO exception
        }

        JSONObject jsonObject = null;
        String loginAccessToken = null;
        String loginInstanceUrl = null;

        try {
            jsonObject = (JSONObject) new JSONTokener(getResult).nextValue();
            loginInstanceUrl = jsonObject.getString("instance_url");
            loginAccessToken = jsonObject.getString("access_token");
        } catch (JSONException jsonException) {
            // Handle JSON exception
        }

        System.out.println(response.getStatusLine());

        httpPost.releaseConnection();
        try {
            final URIBuilder builder = new URIBuilder(loginInstanceUrl);
            final String SOQL = "SELECT Id, Name, LastLoginDate FROM User WHERE Name = \'nsuhara\'";
            builder.setPath("/services/data/v45.0/query/").setParameter("q", SOQL);
            final HttpGet get = new HttpGet(builder.build());
            get.setHeader("Authorization", "Bearer " + loginAccessToken);

            final HttpResponse queryResponse = httpClient.execute(get);

            ObjectMapper mapper = new ObjectMapper();
            final JsonNode queryResults = mapper.readValue(queryResponse.getEntity().getContent(), JsonNode.class);

            System.out.println("queryResults:" + queryResults);
        } catch (Exception e) {
            // Handle exception
        }
    }
}

java_result.json


{
    "totalSize": 1,
    "done": true,
    "records": [
        {
            "attributes": {
                "type": "User",
                "url": "/services/data/v45.0/sobjects/User/0056F000006StK9QAK"
            },
            "Id": "0056F000006StK9QAK",
            "Name": "nsuhara",
            "LastLoginDate": "2019-05-18T14:09:31.000+0000"
        }
    ]
}

Beispiel für die Implementierung eines REST-Webdienstes

Apex-Implementierung

apex_SampleRestApi.cls


@RestResource(urlMapping='/sample/restapi/*')
global without sharing class SampleRestApi {
	@HttpGet
	global static List<User> getUsers() {
		return [SELECT Id, Name, LastLoginDate FROM User WHERE Name = 'nsuhara' LIMIT 1];
	}
}

Apex-REST-Dienst aktiviert

Einstellungen> Benutzer verwalten> Berechtigungssatz (oder Profil)> Systemberechtigung bearbeiten

スクリーンショット 2019-05-19 0.17.52.png

Aktivieren Sie den Zugriff auf die Apex-Klasse

Einstellungen> Benutzer verwalten> Berechtigungssatz (oder Profil)> Apex-Klassenzugriff bearbeiten

スクリーンショット 2019-05-19 0.18.41.png

HTTP-Methode GET-Test

python_requests_sfdc.py


import requests

HOST = '<Parameterreferenz>'
CLIENT_ID = '<Parameterreferenz>'
CLIENT_SECRET = '<Parameterreferenz>'
USERNAME = '<Parameterreferenz>'
PASSWORD_AND_SECURITY_TOKEN = '<Parameterreferenz>'


def main():
    params = {
        'grant_type': 'password',
        'client_id': CLIENT_ID,
        'client_secret': CLIENT_SECRET,
        'username': USERNAME,
        'password': PASSWORD_AND_SECURITY_TOKEN
    }

    res_post = requests.post(
        'https://{}/services/oauth2/token'.format(HOST), params=params)

    access_token = res_post.json().get('access_token')
    instance_url = res_post.json().get('instance_url')
    services_url = '/services/apexrest/sample/restapi'
    headers = {
        'Content-type': 'application/json',
        'Accept-Encoding': 'gzip',
        'Authorization': 'Bearer {}'.format(access_token)
    }

    res_get = requests.request(method='get', url=instance_url+services_url,
                               headers=headers, params={'xxx': 'yyy'}, timeout=10)

    print(res_get.status_code)
    print(res_get.json())


if __name__ == '__main__':
    main()

python_result.json


[
    {
        "attributes": {
            "type": "User",
            "url": "/services/data/v45.0/sobjects/User/0056F000006StK9QAK"
        },
        "Id": "0056F000006StK9QAK",
        "Name": "nsuhara",
        "LastLoginDate": "2019-05-18T14: 11: 22.000+0000"
    }
]

Zusammenfassung - Prüfung des Implementierungsmodells

Betrachten Sie das Implementierungsmodell basierend auf der Umgebung und den Bedingungen

No. Prüfungsbedingungen Implementierungsmodell Stichprobe
1 Wenn ein Paket für Salesforce verfügbar ist Implementieren Sie mit einem Paket Python-Beispiel
2 Wenn das Ausführungsergebnis von SOQL ausreicht Implementieren Sie mithilfe einer HTTP-Anforderung Beispiel für ein Shell-Skript,Java-Beispiel
3 Anders als oben Implementieren Sie Apex REST Web Services Beispiel für die Implementierung eines REST-Webdienstes

Recommended Posts

Abrufen von Salesforce-Daten mithilfe der REST-API
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
Abrufen von Amazon-Daten mit Keep API # 1 Abrufen von Daten
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
FX-Datenerfassung mit der OANDA REST-API
[Python] Holen Sie sich alle Kommentare mit Youtube Data Api
So erhalten Sie Artikeldaten mithilfe der Qiita-API
[Python] Abrufen von Insight-Daten mithilfe der Google My Business-API
Datenerfassung mit Python Googlemap API
Erhalten Sie Daten mithilfe der API des Ministeriums für innere Angelegenheiten und Kommunikation
Datenerfassungsnotiz mit der Backlog-API
Holen Sie sich Daten von Twitter mit Tweepy
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Erhalten Sie E-Mails mithilfe der Google Mail-API in Java
Holen Sie sich Google Fit API-Daten in Python
Erstellen einer Google-Tabelle mit der Python / Google Data-API
Kenntnis der Verwendung der Aurora Severless Data API
Golang api bekommen
Erstellen wir eine REST-API mit SpringBoot + MongoDB
Holen Sie sich die Bild-URL mithilfe der Flickr-API in Python
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Rufen Sie Daten über die Salesforce-API (Bulk-API) in Python ab und laden Sie sie in BigQuery
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
Datenanalyse mit xarray
Holen Sie sich Amazon RDS (PostgreSQL) -Daten mithilfe von SQL mit Pandas
Datenbereinigung 2 Datenbereinigung mit DataFrame
Datenbereinigung mit Python
Ich habe APN (Remote-Benachrichtigung) mithilfe der Parse.com-REST-API ausprobiert
Rufen Sie mithilfe der API eine Liste der GA-Konten, -Eigenschaften und -Ansichten als vertikale Daten ab
Erstellen Sie mit GitHub Pages einen Pseudo-REST-API-Server
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Holen Sie sich Gzip-komprimierte Daten in den Speicher
Erhalten Sie Tweets mit beliebigen Schlüsselwörtern mithilfe der Streaming-API von Twitter
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Zurücksetzen des Passworts über die API mit dem Django Rest Framework
Drücken Sie in Python auf REST, um Daten von New Relic abzurufen
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Holen Sie sich den Produktnamen und den niedrigsten Preis mit der Amazon Product Advertising API
Holen Sie sich das Wetter mit API und lassen Sie Raspberry Pi sprechen!
Spielen Sie mit der YouTube Data API v3 mit dem Google API Python Client
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Strukturdaten von CHEMBLID abrufen
Testen Sie die CloudStack-API mit Simulator
Alterserkennung mit Peppers API
Holen Sie sich ähnliche Beiträge mit Doc2Vec
Wählen Sie Features mit Textdaten aus
Holen Sie sich Youtube-Daten mit Python
Versuchen Sie es mit der Twitter-API
Laden Sie Videos mit der YouTube-API hoch
Informationen erhalten Sie mit zabbix api
Versuchen Sie es mit der Twitter-API
Datenvisualisierungsmethode mit Matplotlib (1)
Holen Sie sich GitHub-Informationen mit PyGithub
Versuchen Sie es mit der PeeringDB 2.0-API
Datenvisualisierungsmethode mit Matplotlib (2)
Verwenden Sie configparser, wenn Sie die API verwenden