Solved

How to strip down cURL return to just the asked for field data?

Posted on 2015-01-31
14
154 Views
Last Modified: 2015-02-02
This cURL script works fine for accessing my API:

curl -X GET -H "ACCEPT: application/xml" -H "X-AUTH-TOKEN: cee8d8a1afd5921dc1efe1817"  "https://api.niftywebsite.com/?opts=APNMB&apps=13629198"  -o out.txt

APNMB is a field in the database.

What I get back is:

<?xml version="1.0" encoding="utf-8"?>
<response>
      <entity>
            <APNMB>13629198</APNMB>
      </entity>
</response>

All I want back is the app number, which is 13629198

Other than writing to a temp file and stripping it out, is there a way directly in cURL to just get the app number returned?
0
Comment
Question by:Mike Caldwell
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 4
  • 3
14 Comments
 
LVL 40

Assisted Solution

by:noci
noci earned 333 total points
ID: 40582521
No,

curl is meant to do just the transfer parts. I is not meant to handle content.
otoh, by running:

curl <yourquery> | parse-script

where parse script can be:
---8<---
#!/bin/bash
grep 'APNMB' | sed -e 's/^[^>]*>//' -e 's/<.*$//'
---8<---

or just:
curl <yourquery> |grep 'APNMB' | sed -e 's/^[^>]*>//' -e 's/<.*$//'
0
 
LVL 33

Assisted Solution

by:shalomc
shalomc earned 167 total points
ID: 40582536
No, there is no way for curl to do it directly.
You don't have to write to a temp file, though. You can pipe it to an XML processing script/program/utility as input.
Just don't use the -o switch.

curl -X GET -H "ACCEPT: application/xml" -H "X-AUTH-TOKEN: cee8d8a1afd5921dc1efe1817"  "https://api.niftywebsite.com/?opts=APNMB&apps=13629198"      | some-xml-processor
0
 
LVL 1

Author Comment

by:Mike Caldwell
ID: 40582896
noci, I added |grep 'APNMB' | sed -e 's/^[^>]*>//' -e 's/<.*$//'  after my full query, and I got an error message of "grep is not an internal or external command"
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
LVL 1

Author Comment

by:Mike Caldwell
ID: 40582928
OK, new learning!  I did not realize that "|" meant new line.  So I redid it, and I still get that error message.
0
 
LVL 40

Expert Comment

by:noci
ID: 40583509
| is NOT newline, but send output from command before | to input of command after |.

It does mean end of a command part.  And all input needs to be in ONE line.
0
 
LVL 1

Author Comment

by:Mike Caldwell
ID: 40583880
That is how I have it, and I still get the whole structure, not just the part I want,.  I think I'm hoping for something that cURL won't do.
0
 
LVL 40

Accepted Solution

by:
noci earned 333 total points
ID: 40584371
curl cannot parse xml...

curl -X GET -H "ACCEPT: application/xml" -H "X-AUTH-TOKEN: cee8d8a1afd5921dc1efe1817"  "https://api.niftywebsite.com/?opts=APNMB&apps=13629198" | grep 'APNMB' | sed -e 's/^[^>]*>//' -e 's/<.*$//'

All on one line should only produce the number:
13629198

note: the " en ' characters ARE important.

if not then please produce wat IS shown as an answer including error messages etc.
0
 
LVL 1

Author Comment

by:Mike Caldwell
ID: 40584501
Got an error message that grep is not a recognized internal or external program.  Windows cURL seems to require double quotes, so I copied and pasted what you posted, then tried again with double quotes like this:


curl -X GET -H "ACCEPT: application/xml" -H "X-AUTH-TOKEN: ceed8d98159b218dc1efe1817" "https://api.niftysite.com/v3/appSearch/?opts=APBNMB&apps=13629198" | grep "APNMB" | sed -e "s/^[^>]*>//" -e "s/<.*$//" -o EE.txt
0
 
LVL 1

Author Comment

by:Mike Caldwell
ID: 40584502
To be clear: nothing shown since it did not run.
0
 
LVL 33

Expert Comment

by:shalomc
ID: 40584524
grep and sed are unix/linux commands, so if you run it on windows you get nothing.

Here is a XSLT transformation to retrieve your value:
<?xml version="1.0"?>   
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
<xsl:template match="APNMB">       
<xsl:value-of select="."/>   
</xsl:template>                    
</xsl:stylesheet>                

Open in new window


All you need now is an XSLT processor.
Try this https://sourceforge.net/projects/saxon/files/Saxon-HE/

I will post shortly more detailed instructions..
0
 
LVL 1

Author Comment

by:Mike Caldwell
ID: 40584587
Please do; I did not see anything in the download that hinted at installation.
0
 
LVL 40

Expert Comment

by:noci
ID: 40584824
old_mike your are correct, cURL is a transfer program so you can access remote systems from a command line or a script... so can't handle content... like html, text, ....  just transfer methods like
HTTP, FTP, ... so how should it hint about content. You can build complete scripts (except for javascript handling) in a shell language, (or php, or perl) to simulate clicking through websites by filling out webforms, GET-ting info, POST-ing info etc. all while managing the cookies & other HTTP headers.
The tool was developed on Unix and ported to various platforms. On Unix (Linux too) there are a lot of programs with a specific defined task. so cURL is a transfer tool, grep is a search tool (like Find on windows, a tad more powerful though), and sed is a kind of editor.

Also getting the info using an XSLT transform will be more exact. The grep / sed method works for a known case with a simple value like your problem.

BTW. For unix tooling under windows checkout cygwin. ( http://cygwin.org/ )
curl & bash can be part of that.

BTW2, it helps to also describe the platform in the question.
0
 
LVL 1

Author Comment

by:Mike Caldwell
ID: 40584916
Yeah, I see that I should have mentioned Windows up front.  Noci, this project is getting way beyond me from a time standpoint.  My partner is my son, and he is expert in all this, just doing something else so I thought I would make some very simple reports from the tool.  By the time I get done, he'll have it done, so I think I'll thank everyone and stop here.  I may still try to access the API with a VBScript, which I have done a lot of.
0
 
LVL 33

Expert Comment

by:shalomc
ID: 40584974
Installing Saxon:
https://sourceforge.net/projects/saxon/files/Saxon-HE/9.6/
Get the "setup" exe file. It will create a folder in "program files". Add the bin folder you your path.

Running XSLT from the command line:
http://www.saxonica.com/html/documentation/using-xsl/commandline.html

Save the XSLT into a file, for example old_mike.xslt and run
Transform -s:xmlfile.xml  -xsl:old_mike.xslt -strip:all

Add the -o:outputfile switch if you need it in a file.

Here is an updated XSLT file.  
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">  
<xsl:output method="text"/>
<xsl:template match="APNMB">       
<xsl:value-of select="."/>   
</xsl:template>                    
</xsl:stylesheet>                

Open in new window

0

Featured Post

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This article was originally published on Monitis Blog, you can check it here . Today it’s fairly well known that high-performing websites and applications bring in more visitors, higher SEO, and ultimately more sales. By the same token, downtime…
Wufoo.com provides powerful tools for surveying targeted groups, and utilizing data from completed surveys to find trends, discover areas of demand or customer expectation, and make business decisions on products or services.
Learn how to set-up PayPal payment integration in your Wufoo form. Allow your users to remit payment through PayPal upon completion of your online form. This is helpful for collecting membership payments, customer payments, donations, and more.

724 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question