পাইথনে আমি কীভাবে ডাব্লুএসডিএল (এসওএপি) ওয়েব পরিষেবা গ্রাহক করব?


124

আমি পাইথনে WSDL SOAP ভিত্তিক ওয়েব পরিষেবা ব্যবহার করতে চাই use আমি পাইভ ইন্টো পাইথন কোডটি দেখেছি তবে এসওএপিপি মডিউল পাইথন 2.5 এর অধীনে কাজ করে না।

আমি আংশিকভাবে কাজ করে এমন Suds ব্যবহার করার চেষ্টা করেছি , তবে নির্দিষ্ট ধরণের সাথে বিচ্ছেদ ঘটেছে (Suds.TypeNotFound: প্রকারটি পাওয়া যায় নি: 'আইটেম')।

আমি ক্লায়েন্টের দিকেও নজর রেখেছি তবে এটি ডাব্লুএসডিএল সমর্থন করে না।

এবং আমি জেডএসআইয়ের দিকে চেয়েছি তবে এটি দেখতে খুব জটিল দেখাচ্ছে। কারও কাছে এর জন্য কোনও নমুনা কোড রয়েছে?

ডাব্লুএসডিএল https://ws.pingdom.com/soap/PingdomAPI.wsdl এবং পিএইচপি 5 এসওএপি ক্লায়েন্টের সাথে সূক্ষ্মভাবে কাজ করে।


3
আপনি কি আপনার গৃহীত উত্তর পরিবর্তন বিবেচনা করবেন? বর্তমানে গৃহীত উত্তরটি -1, এবং +19 এর সাথে আরও একটি উত্তর রয়েছে। আমি জানি এটি ২০০৮ সালের; আমি শুধু পরামর্শ দিচ্ছি।
মার্ক ই। হাজেস

এসইউডিএস কাজ করে না কারণ এটি ডাব্লুএসডিএলকে যথাযথভাবে পার্স করতে পারে না তবে অন্যথায় ভাল পছন্দ হবে। সুতরাং আমি ডাইভ ইন্টু পাইথন থেকে একটি টিউটোরিয়ালের উত্তর পরিবর্তন করেছি যার কয়েকটি বিকল্প রয়েছে। একটি সাইড নোট হিসাবে, Pingdom এখন বিশ্রাম এপিআই হয়েছে pingdom.com/services/api-documentation-rest এ ক্লায়েন্ট লাইব্রেরী সঙ্গে blog.pingdom.com/2011/04/11/pingdom-rest-api-wrappers
davidmytton

উত্তর:


49

আমি সুপারিশ করব যে আপনার এসইডিএসে নজর রাখা উচিত

"সডস ওয়েব সার্ভিসগুলি গ্রাস করার জন্য একটি হালকা ওজনের এসওএপি পাইথন ক্লায়েন্ট।"


Seconded। সুডগুলি তাত্ক্ষণিকভাবে আমার কাছে উপলব্ধি করেছিল, কোনও শ্রেণি প্রজন্ম নয়, এটি ডাব্লুএসডিএল লাইভ লোড করে এবং একটি অবজেক্ট তৈরি করে যা আপনি তা থেকে তত্ক্ষণাত ব্যবহার করতে পারেন।
এনিগমাচারি

19
পুনরাবৃত্তির আমদানির সাথে ডাব্লুএসডিএল খোলার সময় সুডগুলির একটি অসীম পুনরাবৃত্তি সমস্যা রয়েছে। এটি সুডস দ্বারা একটি ব্লকিং বাগ হিসাবে বিবেচিত হয় এবং এটি 3 বছর আগে তৈরি হয়েছিল, তবে এটি এখনও ঠিক করা হয়নি fixed fedorahosted.org/suds/ticket/239 এটি আমার অবাক করে তোলে 2012 সালে সুডগুলি ব্যবহারের জন্য উপযুক্ত কিনা?
বাটন 840

2
সুডস মারা গেছে বলে মনে হচ্ছে দীর্ঘ লাইভ এসইউডিএস - এটি সক্রিয় ফর্ক বলে মনে হচ্ছে।
নার্ডোক

3
এটি শীর্ষস্থানীয় উত্তর, তবে কেউ যদি আজ উত্তরটির জন্য সন্ধান করে তবে জীপকেও নতুন উত্তরগুলি যেমন পরামর্শ দেয় তেমন বিবেচনা করুন ।
টোবিয়াস

25

একটি তুলনামূলকভাবে নতুন লাইব্রেরি রয়েছে যা অত্যন্ত প্রতিশ্রুতিবদ্ধ এবং এখনও নিখুঁত নথিভুক্ত, খুব পরিষ্কার এবং পাইথোনিক বলে মনে হচ্ছে: পাইথন জীপ

উদাহরণের জন্য এই উত্তরটি দেখুন ।


2
এই জন্য +1। আমি আজ জিপ চেষ্টা করেছিলাম এবং এটি ব্যবহার করা আশ্চর্যরকম সহজ ছিল। 3 লাইনের কোড সহ একটি সাবান 1.1 / 1.2 পরিষেবা কল করতে এবং কল করতে সক্ষম হয়েছিল।
জাগু

20

আমি সম্প্রতি একই সমস্যায় হোঁচট খেয়েছি। এখানে আমার সমাধানের সারাংশ দেওয়া হল:

মৌলিক উপাদান কোড ব্লক প্রয়োজন

আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটির প্রয়োজনীয় বুনিয়াদি কোডগুলি নীচে রয়েছে

  1. অধিবেশন অনুরোধ বিভাগ: সরবরাহকারীর সাথে একটি সেশনের অনুরোধ করুন
  2. সেশন প্রমাণীকরণ বিভাগ: সরবরাহকারীর শংসাপত্র সরবরাহ করুন
  3. ক্লায়েন্ট বিভাগ: ক্লায়েন্ট তৈরি করুন
  4. সুরক্ষা শিরোনাম বিভাগ: ক্লায়েন্টে ডাব্লুএস-সুরক্ষা শিরোনাম যুক্ত করুন
  5. গ্রাহক বিভাগ: প্রয়োজনীয় অপারেশন (বা পদ্ধতি) গ্রাহ্য করুন

আপনার কি মডিউল প্রয়োজন?

অনেকে urllib2 এর মতো পাইথন মডিউল ব্যবহার করার পরামর্শ দিয়েছেন; তবে মডিউলগুলির কোনওটিই কমপক্ষে এই নির্দিষ্ট প্রকল্পের জন্য কাজ করে না।

সুতরাং, আপনার প্রয়োজনীয় মডিউলগুলির তালিকা এখানে। প্রথমত, আপনাকে নীচের লিঙ্ক থেকে সডের সর্বশেষ সংস্করণটি ডাউনলোড এবং ইনস্টল করতে হবে:

pypi.python.org/pypi/suds-jurko/0.4.1.jurko.2

তদতিরিক্ত, আপনাকে নিম্নলিখিত লিঙ্কগুলি থেকে যথাক্রমে অনুরোধগুলি এবং Suds_requests মডিউলগুলি ডাউনলোড এবং ইনস্টল করতে হবে (অস্বীকৃতি: আমি এখানে পোস্ট করতে নতুন, তাই আমি এখনকার জন্য একাধিক লিঙ্ক পোস্ট করতে পারি না)।

pypi.python.org/pypi/requests

pypi.python.org/pypi/suds_requests/0.1

একবার আপনি সফলভাবে এই মডিউলগুলি ডাউনলোড এবং ইনস্টল করার পরে আপনি যেতে ভাল।

কোড

পূর্বে বর্ণিত পদক্ষেপগুলি অনুসরণ করে কোডটি নীচের মত দেখাচ্ছে: আমদানি:

import logging
from suds.client import Client
from suds.wsse import *
from datetime import timedelta,date,datetime,tzinfo
import requests
from requests.auth import HTTPBasicAuth
import suds_requests

সেশন অনুরোধ এবং প্রমাণীকরণ:

username=input('Username:')
password=input('password:')
session = requests.session()
session.auth=(username, password)

ক্লায়েন্ট তৈরি করুন:

client = Client(WSDL_URL, faults=False, cachingpolicy=1, location=WSDL_URL, transport=suds_requests.RequestsTransport(session))

WS- সুরক্ষা শিরোনাম যুক্ত করুন:

...
addSecurityHeader(client,username,password)
....

def addSecurityHeader(client,username,password):
    security=Security()
    userNameToken=UsernameToken(username,password)
    timeStampToken=Timestamp(validity=600)
    security.tokens.append(userNameToken)
    security.tokens.append(timeStampToken)
    client.set_options(wsse=security)

দয়া করে নোট করুন যে এই পদ্ধতিটি চিত্র 1 এ চিত্রিত সুরক্ষা শিরোনাম তৈরি করে। সুতরাং, আপনি যে পরিষেবাটি গ্রহণ করছেন তার মালিকের দ্বারা সরবরাহ করা সঠিক সুরক্ষা শিরোনামের ফর্ম্যাটের উপর নির্ভর করে আপনার বাস্তবায়ন পরিবর্তিত হতে পারে।

সম্পর্কিত পদ্ধতি (বা অপারেশন) গ্রহণ করুন:

result=client.service.methodName(Inputs)

লগিং :

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

logging.basicConfig(level=logging.INFO) 
logging.getLogger('suds.client').setLevel(logging.DEBUG) 
logging.getLogger('suds.transport').setLevel(logging.DEBUG)

ফলাফল:

এখানে আমার ক্ষেত্রে ফলাফল। নোট করুন যে সার্ভারটি HTTP 200 ফিরিয়ে দিয়েছে HT এটি HTTP অনুরোধ-প্রতিক্রিয়াটির জন্য আদর্শ সাফল্য কোড।

(200, (collectionNodeLmp){
   timestamp = 2014-12-03 00:00:00-05:00
   nodeLmp[] = 
      (nodeLmp){
         pnodeId = 35010357
         name = "YADKIN"
         mccValue = -0.19
         mlcValue = -0.13
         price = 36.46
         type = "500 KV"
         timestamp = 2014-12-03 01:00:00-05:00
         errorCodeId = 0
      },
      (nodeLmp){
         pnodeId = 33138769
         name = "ZION 1"
         mccValue = -0.18
         mlcValue = -1.86
         price = 34.75
         type = "Aggregate"
         timestamp = 2014-12-03 01:00:00-05:00
         errorCodeId = 0
      },
 })

1
এই বলে যে মূল্য হতে পারে suds_requestযখন ইনস্টল ব্যর্থ হবে, তাই যদি আপনি ব্যবহার করছেন suds-jurkoকাঁটাচামচ, আপনি ইনস্টল করতে পারেন suds_requestযা সাবানফেনা এর jurko এর সংস্করণ সঙ্গে কাজ করার অভিযোজিত হয়েছিল:pip install git+https://github.com/chrcoe/suds_requests.git@feature/python3_suds_jurko
ত্রুটি-বিচ্যুতি

7

এই মুহুর্তে (২০০৮ হিসাবে) পাইথন স্তন্যপানের জন্য উপলব্ধ সমস্ত এসওএপি লাইব্রেরি রয়েছে। আমি সম্ভব হলে এসওএপি এড়িয়ে চলার পরামর্শ দিচ্ছি। গতবার আমরা যেখানে পাইথন থেকে একটি এসওএপি ওয়েব পরিষেবা ব্যবহার করতে বাধ্য হয়েছিলাম, আমরা সি # তে একটি মোড়ক লিখেছিলাম যা একদিকে এসওএপি পরিচালনা করে এবং অন্যদিকে সিওএম কথা বলে।


15
এটি xML এবং http এর উপর ভিত্তি করে একটি সাধারণ প্রোটোকল ব্যবহার করার জন্য অত্যন্ত জটিল উপায় বলে মনে হচ্ছে।
ddaa

1
২০০৮ এর সময়, এই পদ্ধতিটি ছিল আমাদের প্রয়োজনীয়তার জন্য সবচেয়ে কম স্তন্যপান করে। আমি মনে করি মনে হয় যে সেই নির্দিষ্ট ওয়েব পরিষেবাটি এমন অজানা বিষয় সম্পর্কে অত্যন্ত আকর্ষণীয় ছিল যা সমস্ত অজগর লাইব্রেরিতে ভুল হয়ে গিয়েছিল।
ম্যাথিউ স্কাউটেন

1
2019, পাইথন জিপ, সুডস এখনও অনেকগুলি পার্সিং অসঙ্গতি বিষয়গুলির প্রবণ। দুর্বলভাবে ডাব্লুএসডিএল ডকুমেন্টগুলি বজায় রাখা সেই মডিউলগুলি নন-স্টপ ফায়ারক্র্যাকারের মতো ব্যতিক্রম ছুঁড়ে ফেলবে।
মটমুট


6

আমি পর্যায়ক্রমে এর একটি সন্তোষজনক উত্তরের জন্য অনুসন্ধান করি, তবে এখন পর্যন্ত কোনও ভাগ্য নেই। আমি সাবান ইউআই + অনুরোধ + ম্যানুয়াল শ্রম ব্যবহার করি।

আমি জাভাটি শেষ বার করার প্রয়োজনে ছেড়ে দিয়েছিলাম এবং শেষ বার এটি করতে চেয়েছি কয়েকবার ছেড়ে দিয়েছি , তবে এটি প্রয়োজনীয় ছিল না।

প্রজেক্ট প্লেসের RESTful API এর সাথে গত বছর অনুরোধের লাইব্রেরিটি সাফল্যের সাথে ব্যবহার করে, আমার কাছে ঘটেছিল যে সম্ভবত আমি যেভাবে এসওএপি অনুরোধগুলি অনুরূপভাবে প্রেরণ করতে চাইছি সেগুলি হ্যান্ড-রোল করতে পারি।

খুব কঠিন নয় যে সক্রিয় আউট, কিন্তু এটা হয় বিশেষ করে যদি ক্ষেত্রের inconsistently নামকরণ করা হয় (এক আমি বর্তমানে আজ কাজ করছি 'jobId', JobId 'এবং' JobID 'হয়েছে সময় ব্যয়কারী এবং ত্রুটির প্রবণ। আমি লোড soapUI ব্যবহার ডাব্লুএসডিএল এন্ডপয়েন্টস ইত্যাদি সহজে এক্সট্রাক্ট করা এবং কিছু ম্যানুয়াল টেস্টিং করা সহজতর করে তুলতে.আর আমি ভাগ্যবান যে আমি যে কোনও ডাব্লুএসডিএল ব্যবহার করছি তার পরিবর্তনের ফলে প্রভাবিত না হয়েছি।


3

এটি সত্য নয় যে এসওএপিপি পাইথন 2.5 এর সাথে কাজ করে না - এটি কাজ করে, যদিও এটি খুব সাধারণ এবং সত্যই, সত্যই মৌলিক। আপনি যদি আরও জটিল ওয়েবসার্ভিসের সাথে কথা বলতে চান তবে জেডএসআই আপনার একমাত্র বন্ধু।

আমি যে সত্যিকারের দরকারী ডেমোটি পেয়েছি তা হল http://www.ebi.ac.uk/Tools/webservices/tutorials/python - এটি আমাকে জেডএসআই কীভাবে কাজ করে তা বুঝতে সহায়তা করে helped


1
পাইথন সেটআপ.পিপি ইনস্টল সর্বশেষ প্রকাশের সাথে ত্রুটি দেয়। সর্বশেষতম ডি কপিটি কাজ করতে পারে তবে এটি করতে ব্যথা।
ডেভিডমিটটন


1

এসওএপিপি এখন জেএসএল দ্বারা প্রতিস্থাপিত, এএএফআইকি। এটি একটি মূল বিষয়, কারণ পাইথন ২.৫ বা পাইথন ২. either এর যে কোনও একটিতে আমি কাজ করতে পারি না, খুব কম সংকলন করি না


1
#!/usr/bin/python
# -*- coding: utf-8 -*-
# consume_wsdl_soap_ws_pss.py
import logging.config
from pysimplesoap.client import SoapClient

logging.config.dictConfig({
    'version': 1,
    'formatters': {
        'verbose': {
            'format': '%(name)s: %(message)s'
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        },
    },
    'loggers': {
        'pysimplesoap.helpers': {
            'level': 'DEBUG',
            'propagate': True,
            'handlers': ['console'],
        },
    }
})

WSDL_URL = 'http://www.webservicex.net/stockquote.asmx?WSDL'
client = SoapClient(wsdl=WSDL_URL, ns="web", trace=True)
client['AuthHeaderElement'] = {'username': 'someone', 'password': 'nottelling'}

#Discover operations
list_of_services = [service for service in client.services]
print(list_of_services)

#Discover params
method = client.services['StockQuote']

response = client.GetQuote(symbol='GOOG')
print('GetQuote: {}'.format(response['GetQuoteResult']))


নমুনা আউটপুট: ... DEBUG: pysimplesoap.helpers: কমপ্লেক্স কনটেন্ট / সিম্পল টাইপ / এলিমেন্ট স্ট্রিং = স্ট্রিং [u'StockQuote '] গেটকোট: <স্টককোটিস << স্টক >< সিম্বল> জিগু << সিম্বল> <বিগত> 816.13 </Last> <তারিখ> 3/23/2017 </ তারিখ> <টাইম> 11:41 টা </ সময়> <পরিবর্তন> -13,46 </ পরিবর্তন> <খুলুন> 820,01 </ ওপেন> <উচ্চ> 822,57 </ উচ্চ> <কম> 812.26 </Low> <ভলিউম> 1973140 </volume> <MktCap> 564.29B </MktCap> <পূর্ববর্তী ক্লোজ> 829.59 </PreLiveClose> <PercentageChange> -1.62% </PrecentageChange> <AnRange> 663.28Anan> <দ্য রিপোর্ট> ২.8.৮৮/২০১arn <<<<<>> ২৯.২৮ </<> <নাম> বর্ণমালা ইনক। </ নাম> </stock> </stockQuotes>
ডাউন স্ট্রিম

পাইসিম্লেসোপ / ক্লায়েন্ট.পি: পাইথন 3 এ ব্যর্থ: 757 - 'ডিক' অবজেক্টটির কোনও 'ইটারাইটেমস' নেই
আইরডনা

স্পষ্টতই সংস্করণটি যা পিআইপি সহ আসে তা ভাঙা। এটি জিআইটি থেকে ম্যানুয়ালি ইনস্টল করতে হবে - এটি জিনিসগুলি ঠিক করে
ierdna

গুড পয়েন্ট: এই লিঙ্কে দেখুন: stackoverflow.com/questions/13998492/iteritems-in-python "কারণ dict.items এখন নেই জিনিস dict.iteritems পাইথন 2 করেনি dict.iteritems সরানো হয়েছে ..."
নিচে স্ট্রিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.