2016-05-11 11 views
0

get parse postjsonと変数を使ったPython GETとPOST

私はこれを動作させるようには思えません。これは私が起こっていると思うことです:(しかし、明らかに私は何か間違っています。)

  1. ユーザーはnidの形で私を与えます。
  2. nidを取得し、jsonダンプを取得するURLを作成します。
  3. jsonのダンプからタイトルとボディを取得し、変数titleとbodyに格納します。
  4. サイト2

試みに様々な変数やPOSTで別のURLを作成:

import requests 
import json 

#Token used to post 
auth_token = "X" 

#Take and parse payload for title and body at site 1. 
def payload(nid): 
    from urllib.request import urlopen 
    with urlopen("www.site1.com/" + nid + ".json") as rr: 
     result = json.loads(rr.read().decode(rr.headers.get_content_charset("utf-8"))) 
    title = (result["title"]) 
    body = (result["body"]["und"]) 

#Take title, body, auth_token and then also nid from user input, and POSTing to site 2 
def add(nid): 
    url = "www.site2.com/stuff.json" 
    headers = {"content-type": "application/json"} 
    payload = { 
     "auth_token": auth_token, 
     "document": 
      { 
       "external_id": nid, 
       "fields": [ 
        {"name": "title", "value": title, "type": "string"}, 
        {"name": "path", "value": "www.site1.com/node/"+nid,"type": "enum"}, 
        {"name": "nid", "value": nid, "type": "integer"}, 
        {"name": "body", "value": body, "type": "text"}, 
       ]} 
    } 

    r = requests.post(url, data=json.dumps(payload), headers=headers) 
    print("{} was added".format(nid)) 

while True: 

#Trigger User Input 
    new_item = input("> ") 

#Add nid 
    if new_item == "A": 
     nid = input("Give me an NID please: ") 
     payload(nid) 
     add(nid) 
+0

問題またはエラーは何ですか。 – Backtrack

+0

エラーはありません。 POSTは実際に他のWebサイトには送信しません。または、少なくともデータが投稿されていない。追加機能でタイトルとボディの代わりに静的な値を追加すると、機能します。ペイロード機能で解析されたデータを印刷することもできます。しかし、それらの両方は動作しませんか?私は投稿しようとしているデータを持っていますか?エンコーディングの問題? – avorter

答えて

0

あなたは、def add(nid)機能パラメータ/引数で体をタイトルに合格していません。 これを修正するには、本体/タイトル&を返すようにdef payload(nid)を変更して、この引数をadd(nid,title,body)関数に渡します。

希望すると便利です。

import requests 
import json 

#Token used to post 
auth_token = "X" 

#Take and parse payload for title and body at site 1. 
def payload(nid): 
    from urllib.request import urlopen 
    with urlopen("www.site1.com/" + nid + ".json") as rr: 
     result = json.loads(rr.read().decode(rr.headers.get_content_charset("utf-8"))) 
    title = (result["title"]) 
    body = (result["body"]["und"]) 
    return (title,body) 
#Take title, body, auth_token and then also nid from user input, and POSTing to site 2 
def add(nid,title,body): 
    url = "www.site2.com/stuff.json" 
    headers = {"content-type": "application/json"} 
    payload = { 
     "auth_token": auth_token, 
     "document": 
      { 
       "external_id": nid, 
       "fields": [ 
        {"name": "title", "value": title, "type": "string"}, 
        {"name": "path", "value": "www.site1.com/node/"+nid,"type": "enum"}, 
        {"name": "nid", "value": nid, "type": "integer"}, 
        {"name": "body", "value": body, "type": "text"}, 
       ]} 
    } 

    r = requests.post(url, data=json.dumps(payload), headers=headers) 
    print("{} was added".format(nid)) 

while True: 

#Trigger User Input 
    new_item = input("> ") 

#Add nid 
    if new_item == "A": 
     nid = input("Give me an NID please: ") 
     title,body = payload(nid) 
     add(nid,title,body) 
+0

これを行う方法に関する提案はありますか? – avorter

+0

は答えを更新しました!これを試してください – Tanu

+0

ええ、かなりこれが動作していることを確認します。私のポストは何らかの理由で他のウェブサイトにヒットしていないだけです。いずれにしても、助けてくれてありがとう! Pythonの第3.5日: – avorter

関連する問題