{"id":4144,"date":"2022-02-24T11:44:11","date_gmt":"2022-02-24T09:44:11","guid":{"rendered":"https:\/\/www.lamapoll.de\/blog\/?p=4144"},"modified":"2024-03-06T14:58:53","modified_gmt":"2024-03-06T12:58:53","slug":"lamapoll-api-auch-in-python","status":"publish","type":"post","link":"https:\/\/www.lamapoll.de\/blog\/lamapoll-api-auch-in-python\/","title":{"rendered":"LamaPoll API auch in Python"},"content":{"rendered":"\n<p>Die REST-API-Schnittstelle von LamaPoll wurde entwickelt, um eine Verbindung zu Ihrem CRM (Customer Relationship Management) herzustellen, um auf Anfrage automatisch Befragte hinzuzuf\u00fcgen oder zu l\u00f6schen oder um die Umfrageergebnisse einem Data-Warehouse-System oder weiteren Analysetools zur Verf\u00fcgung zu stellen. Die API (Application Programming Interface) wird dabei \u00fcber eine einzige Endpunkt-URL angefordert, die mit den meisten g\u00e4ngigen Programmiersprachen zug\u00e4nglich ist. Unsere API-Dokumentation finden Sie hier: <a href=\"https:\/\/app.lamapoll.de\/lp\/api-doc\/index.php\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/app.lamapoll.de\/lp\/api-doc\/index.php<\/a><\/p>\n\n\n\n<p><strong><em>[AKTUALISIERUNG 2024]<\/em> Neue LamaPoll-API<\/strong>: Inzwischen haben wir die Automatisierung von Umfragen mit der neuen API-Version <strong>API v2<\/strong> auf ein neues Level gehoben. Die Dokumentation der neuen LamaPoll-API finden Sie sowohl in Ihrem LamaPoll-Account als auch hier: <a href=\"https:\/\/app.lamapoll.de\/api\/v2\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Neue LamaPoll API v2<\/strong><\/a><\/p>\n\n\n\n<p>Unsere API kann auch in Python zug\u00e4nglich gemacht werden. An dieser Stelle zeigen wir Ihnen, wie Sie mit der LamaPoll-API in Python umgehen, API-Requests in Python umsetzen. Die Anleitung wurde uns freundlicherweise von unserer Community zur Verf\u00fcgung gestellt. (Eine Gew\u00e4hr f\u00fcr die Richtigkeit k\u00f6nnen wie nicht \u00fcbernehmen.)<\/p>\n\n\n\n<p><strong>LamaPoll API in Phyton:<\/strong><\/p>\n\n\n\n<p><em># ==========================================================================================================<br># Abruf der Umfragedaten vom Server der LamaPoll-Website via API<br># ==========================================================================================================<br>#&nbsp;&nbsp; 0.&nbsp; <\/em><em>LamaPoll-Anmeldedaten<br># ==========================================================================================================<br><\/em>email&nbsp; = &#8222;max.mustermann@emailpostfach.de&#8220;<br>apikey = &#8222;&lt;Privater API-Key&gt;&#8220;<br>apiURL = &#8218;https:\/\/api.lamapoll.de\/api.php&#8216;<br><em># ==========================================================================================================<br>#&nbsp;&nbsp; 1. <\/em><em>\u00dcberpr\u00fcfe Server-Verf\u00fcgbarkeit<br># ==========================================================================================================<br><\/em>server_response = requests.get(str(apiURL)+&#8220;?task=getResults&#8220;)<br>if server_response.status_code == 200:<br>&nbsp;&nbsp;&nbsp; print(&#8222;Umfrage-Server ist f\u00fcr Datenabruf verf\u00fcgbar. Code = &#8222;+str(server_response.status_code))<br>else:<br>&nbsp;&nbsp;&nbsp; print(&#8222;Fehler beim Zugriff auf Umfrage-Server. Code = &#8222;+str(server_response.status_code))<br><em># ==========================================================================================================<br>#&nbsp;&nbsp; 2. Authorization Process<br># ==========================================================================================================<br><\/em>authorization_query = requests.get(str(apiURL)+&#8220;?task=requestAuth&amp;user=&#8220;+str(email))<br>authToken = str(authorization_query.json()[&#8218;authToken&#8216;])<br>authToken_apikey = str(authToken+apikey)<br>userToken = hashlib.sha256(authToken_apikey.encode(&#8218;utf-8&#8216;)).hexdigest()<br>request_query = requests.get(str(apiURL)+&#8220;?task=authorize&amp;user=&#8220;+str(email)+&#8220;&amp;userToken=&#8220;+str(userToken)+&#8220;&#8220;)<br>requestToken = str(request_query.json()[&#8218;requestToken&#8216;])<br>requestToken_apikey = str(requestToken+apikey)<br>apiToken = hashlib.sha256(requestToken_apikey.encode(&#8218;utf-8&#8216;)).hexdigest()<br>print(&#8222;authToken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#8222;+authToken)<br>print(&#8222;authToken_apikey = &#8222;+authToken_apikey)<br>print(&#8222;userToken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#8222;+userToken)<br>print(&#8222;requestToken&nbsp;&nbsp;&nbsp;&nbsp; = &#8222;+requestToken)<br>print(&#8222;apiToken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#8222;+apiToken)<br><em># ==========================================================================================================<br>#&nbsp;&nbsp; 3. Rufe den Status alle Umfragen ab (online | inwork | offline)<br># ==========================================================================================================<br><\/em>onlinestatus_query = requests.get(str(apiURL)+&#8220;?task=listPolls&amp;status=online&amp;apiToken=&#8220;+str(apiToken)+&#8220;&amp;user=&#8220;+str(email))<br>inworkstatus_query = requests.get(str(apiURL)+&#8220;?task=listPolls&amp;status=inwork&amp;apiToken=&#8220;+str(apiToken)+&#8220;&amp;user=&#8220;+str(email))<br>offlinestatus_query = requests.get(str(apiURL)+&#8220;?task=listPolls&amp;status=offline&amp;apiToken=&#8220;+str(apiToken)+&#8220;&amp;user=&#8220;+str(email))<br>n_online = str(onlinestatus_query.json()[&#8217;numItems&#8216;])<br>n_inwork = str(inworkstatus_query.json()[&#8217;numItems&#8216;])<br>n_offline = str(offlinestatus_query.json()[&#8217;numItems&#8216;])<br>list_online = onlinestatus_query.json()[&#8218;items&#8216;]<br>list_inwork = inworkstatus_query.json()[&#8218;items&#8216;]<br>list_offline = offlinestatus_query.json()[&#8218;items&#8216;]<br>print()<br>print(&#8222;Anzahl an Umfragen mit Status ONLINE&nbsp; = &#8222;+n_online)<br>ii = 1<br>for x in list_online:<br>&nbsp;&nbsp;&nbsp; print(str(ii)+&#8220;. &#8222;+x)<br>&nbsp;&nbsp;&nbsp; ii = ii + 1<br>print()<br>ii = 1<br>print(&#8222;Anzahl an Umfragen mit Status INWORK&nbsp; = &#8222;+n_inwork)<br>for x in list_inwork:<br>&nbsp;&nbsp;&nbsp; print(str(ii)+&#8220;. &#8222;+x)<br>&nbsp;&nbsp;&nbsp; ii = ii + 1<br>print()<br>ii = 1<br>print(&#8222;Anzahl an Umfragen mit Status OFFLINE = &#8222;+n_offline)<br>for x in list_offline:<br>&nbsp;&nbsp;&nbsp; print(str(ii)+&#8220;. &#8222;+x)<br>&nbsp;&nbsp;&nbsp; ii = ii + 1<br>print()<br><em># ==========================================================================================================<br>#&nbsp;&nbsp; 4.&nbsp; Funktion zum Datenabruf der Umfragedaten f\u00fcr Umfrage &#8222;poll_name&#8220;<br># ==========================================================================================================<br><\/em>def get_data(pollName,email,apiToken):<br>&nbsp;&nbsp;&nbsp; <em>#<br>&nbsp;&nbsp;&nbsp; # LIST OF ALL POSSIBLE PARAMETERS IN LIST par[] (see LamaPoll Site for more information https:\/\/app.lamapoll.de\/#\/api\/doc)<br>&nbsp;&nbsp;&nbsp; #<br>&nbsp;&nbsp;&nbsp; <\/em>par = [str(&#8222;&#8220;) for x in range(22)]<br>&nbsp;&nbsp;&nbsp; par[0]=&#8220;&amp;pollName=&#8220;+str(pollName)&nbsp;&nbsp;&nbsp; <em># &amp; pollName=&lt;Name of survey&gt;(Required)<br>&nbsp;&nbsp;&nbsp; <\/em>par[1]=&#8220;type=csv&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; type=csv(Required, only &#8222;csv&#8220; available)<br>&nbsp;&nbsp;&nbsp; <\/em>par[2]=&#8220;status=started&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; status = &lt;started|completed&gt;(Optional, default &#8222;started&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[3]=&#8220;dateFrom=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; dateFrom = &lt;Date&gt;(Optional, as UNIX-timestamp)<br>&nbsp;&nbsp;&nbsp; <\/em>par[4]=&#8220;dateTo=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; dateTo = &lt;Date&gt;(Optional, as UNIX-timestamp)<br>&nbsp;&nbsp;&nbsp; <\/em>par[5]=&#8220;notAnswered=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; notAnswered = &lt;Value&gt;(Optional, default &#8222;&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[6]=&#8220;notSeen=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; notSeen = &lt;Value&gt;(Optional, default &#8222;&#8220;)<br>&nbsp;&nbsp; &nbsp;<\/em>par[7]=&#8220;missValue=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; missValue = &lt;Value&gt;(Optional, default &#8222;&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[8]=&#8220;missText=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; missText = &lt;Value&gt;(Optional, default &#8222;&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[9]=&#8220;delimiter=;&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; delimiter = &lt;Char&gt;(Optional, default &#8222;;&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[10]=&#8220;enclosure=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; enclosure = &lt;Char&gt;(Optional, default &#8222;&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[11]=&#8220;variables=vID;vDATE;V1&#8243;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; variables = &lt;List of variables&gt;(Optional, default &#8222;&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[12]=&#8220;filter=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; filter = &lt;Filter of variables&gt;(Optional, default &#8222;&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[13]=&#8220;withResponseStats=1&#8243;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; withResponseStats = &lt;0|1&gt;(Optional, default &#8222;1&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[14]=&#8220;withAttributes=1&#8243;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; withAttributes = &lt;0|1&gt;(Optional, default &#8222;1&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[15]=&#8220;withPageStats=1&#8243;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; withPageStats = &lt;0|1&gt;(Optional, default &#8222;1&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[16]=&#8220;exportLanguage=&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; exportLanguage = &lt;Language&gt;(Optional, defaults to first survey language)<br>&nbsp;&nbsp;&nbsp; <\/em>par[17]=&#8220;useMultiline=0&#8243;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; useMultiline = &lt;0|1&gt;(Optional, default &#8222;0&#8220;)<br>&nbsp; &nbsp;&nbsp;<\/em>par[18]=&#8220;useCodings=1&#8243;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; useCodings = &lt;0|1&gt;(Optional, default &#8222;1&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[19]=&#8220;showQuestionHeader=0&#8243;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; showQuestionHeader = &lt;0|1&gt;(Optional, default &#8222;0&#8220;)<br>&nbsp;&nbsp;&nbsp; <\/em>par[20]=&#8220;apiToken=&#8220;+str(apiToken)&nbsp;&nbsp;&nbsp; <em># &amp; apiToken = &lt;API-Token&gt;(Required)<br>&nbsp;&nbsp;&nbsp; <\/em>par[21]=&#8220;user=&#8220;+str(email)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em># &amp; user = &lt;UserEmail&gt;(Required)<br>&nbsp;&nbsp;&nbsp; <\/em>request = &#8218;&amp;&#8216;.join(par)<br>&nbsp;&nbsp;&nbsp; <em>#<br>&nbsp;&nbsp;&nbsp; # GET DATA FROM LamaPoll using above parameter list<br>&nbsp;&nbsp;&nbsp; #<br>&nbsp;&nbsp;&nbsp; <\/em>get_data_query = requests.get(str(apiURL)+&#8220;?task=getResults&#8220;+str(request))<br><em># ==========================================================================================================<br>#&nbsp;&nbsp; 5.&nbsp; Datenabruf f\u00fcr Umfrage &#8222;poll_name&#8220;<br># ==========================================================================================================<br><\/em>pollName = &#8222;&lt;Name of survey&gt;&#8220;<br>get_data(pollName,email,apiToken)<br><em># ==========================================================================================================<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die REST-API-Schnittstelle von LamaPoll wurde entwickelt, um eine Verbindung zu Ihrem CRM (Customer Relationship Management) herzustellen, um auf Anfrage automatisch Befragte hinzuzuf\u00fcgen oder zu l\u00f6schen oder um die Umfrageergebnisse einem Data-Warehouse-System oder weiteren Analysetools zur Verf\u00fcgung zu stellen. Die API (Application Programming Interface) wird dabei \u00fcber eine einzige Endpunkt-URL angefordert, die mit den meisten g\u00e4ngigen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1170,1168,517,1169],"class_list":["post-4144","post","type-post","status-publish","format-standard","hentry","category-feedbackmanagement","tag-api-requests-python","tag-automatischer-datenexport-in-python","tag-lamapoll-api","tag-lamapoll-automatisierung-python"],"_links":{"self":[{"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/posts\/4144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/comments?post=4144"}],"version-history":[{"count":23,"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/posts\/4144\/revisions"}],"predecessor-version":[{"id":9418,"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/posts\/4144\/revisions\/9418"}],"wp:attachment":[{"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/media?parent=4144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/categories?post=4144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lamapoll.de\/blog\/wp-json\/wp\/v2\/tags?post=4144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}