Mike Caldwell
asked on
How to strip down cURL return to just the asked for field data?
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?
curl -X GET -H "ACCEPT: application/xml" -H "X-AUTH-TOKEN: cee8d8a1afd5921dc1efe1817"
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?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
OK, new learning! I did not realize that "|" meant new line. So I redid it, and I still get that error message.
| 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.
It does mean end of a command part. And all input needs to be in ONE line.
ASKER
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.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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
curl -X GET -H "ACCEPT: application/xml" -H "X-AUTH-TOKEN: ceed8d98159b218dc1efe1817"
ASKER
To be clear: nothing shown since it did not run.
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:
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..
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>
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..
ASKER
Please do; I did not see anything in the download that hinted at installation.
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.
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.
ASKER
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.
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.
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>
ASKER