Archive
#EU Reverse #VAT #API – Find a company’s VAT number #VIES

The VAT API is an API that can look up a VAT number from the name of a company based in Europe, or list VAT registered companies within a town , city, or street. You can also use it to verify known VAT numbers, using the VIES service.
JSON interface
Example: http://www.vatapi.co.uk/api.aspx?Name=Microsoft
Request VAT data via JSON
Parameters:
| Name | Meaning |
| Name | The name of the company being searched
|
| City | The address of the company being searched
|
| Vat | The VAT number to be verified
|
| Country | The ISO3166 Country code, i.e. GB
|
Sample response:
[
{
“VatNumber”: “CZ 47123737”,
“LegalName”: “Microsoft s.r.o.”,
“Address”: “Vysko\u010dilova 1561\/4a, Praha 4 – Michle, 140 00 Praha 4”
},
{
“VatNumber”: “GB 724594615”,
“LegalName”: “Microsoft Limited”,
“Address”: “Fao Carolyn Cheney, Microsoft Limited, Microsoft Campus, Reading, RG6 1WG”
},
{
“VatNumber”: “NL 007747366B01”,
“LegalName”: “Microsoft B.V.”,
“Address”: “Evert Van De Beekstraat 00354, 1118Cz Schiphol”
},
{
“VatNumber”: “IT 08106710158”,
“LegalName”: “Microsoft S.R.L.”,
“Address”: “Via Lombardia 2\/A-1, 20068 Peschiera Borromeo (MI)”
},
{
“VatNumber”: “FI 08974643”,
“LegalName”: “Microsoft Oy”,
“Address”: “FIN-02150 Espoo, Finland, Keilalahdentie 2-4”
},
{
“VatNumber”: “IE 9811916F”,
“LegalName”: “Microsoft Payments”,
“Address”: “Carmanhall Road, Sandyford Industrial Estate, Dublin 18”
},
{
“VatNumber”: “BE 0437910359”,
“LegalName”: “NV Microsoft”,
“Address”: “Da Vincilaan 3, 1930 Zaventem”
},
{
“VatNumber”: “NO 991036156”,
“LegalName”: “Microsoft Domains Norge AS”,
“Address”: “NO-1366 Lysaker, Lysaker torg 45”
},
{
“VatNumber”: “SI 63458756”,
“LegalName”: “Microsoft D.O.O., Ljubljana”,
“Address”: “Ameri\u0161ka Ulica 8, 1000 Ljubljana”
},
{
“VatNumber”: “GB 642353552”,
“LegalName”: “Microsoft Research Limited”,
“Address”: “21 Station Road, Cambridge, CB1 2FB”
}
]
XML interface
Example: http://www.vatapi.co.uk/api.asmx/Search?name=Microsoft&city=
Request VAT data via XML
If you are using a .NET environment, or are more familiar with XML / SOAP, then you can make a web service reference to the WSDL – here http://www.vatapi.co.uk/api.asmx?wsdl
There are two methods
- Search
This is to look up the VAT number of a company when you only know its name, or location.
This works in Austria, Switzerland, Great Britain, Ireland, Italy, France, Belgium, Holland, Luxembourg, Denmark, Norway, Finland, Czech Republic, Hungary, Slovenia, Greece, and Malta - Verify
This is when you want to verify the VAT number of a company, and find it’s legal name and address. This works in all european countries.
Sample response:
<?xml version=”1.0″ encoding=”utf-8″?>
<ArrayOfOrganisation xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://vatapi.co.uk/”>
<Organisation>
<VatNumber>CZ 47123737</VatNumber>
<LegalName>Microsoft s.r.o.</LegalName>
<Address>Vyskočilova 1561/4a, Praha 4 – Michle, 140 00 Praha 4</Address>
</Organisation>
<Organisation>
<VatNumber>GB 724594615</VatNumber>
<LegalName>Microsoft Limited</LegalName>
<Address>Fao Carolyn Cheney, Microsoft Limited, Microsoft Campus, Reading, RG6 1WG</Address>
</Organisation>
<Organisation>
<VatNumber>NL 007747366B01</VatNumber>
<LegalName>Microsoft B.V.</LegalName>
<Address>Evert Van De Beekstraat 00354, 1118Cz Schiphol</Address>
</Organisation>
<Organisation>
<VatNumber>IT 08106710158</VatNumber>
<LegalName>Microsoft S.R.L.</LegalName>
<Address>Via Lombardia 2/A-1, 20068 Peschiera Borromeo (MI)</Address>
</Organisation>
<Organisation>
<VatNumber>FI 08974643</VatNumber>
<LegalName>Microsoft Oy</LegalName>
<Address>FIN-02150 Espoo, Finland, Keilalahdentie 2-4</Address>
</Organisation>
<Organisation>
<VatNumber>IE 9811916F</VatNumber>
<LegalName>Microsoft Payments</LegalName>
<Address>Carmanhall Road, Sandyford Industrial Estate, Dublin 18</Address>
</Organisation>
<Organisation>
<VatNumber>BE 0437910359</VatNumber>
<LegalName>NV Microsoft</LegalName>
<Address>Da Vincilaan 3, 1930 Zaventem</Address>
</Organisation>
<Organisation>
<VatNumber>NO 991036156</VatNumber>
<LegalName>Microsoft Domains Norge AS</LegalName>
<Address>NO-1366 Lysaker, Lysaker torg 45</Address>
</Organisation>
<Organisation>
<VatNumber>SI 63458756</VatNumber>
<LegalName>Microsoft D.O.O., Ljubljana</LegalName>
<Address>Ameriška Ulica 8, 1000 Ljubljana</Address>
</Organisation>
<Organisation>
<VatNumber>GB 642353552</VatNumber>
<LegalName>Microsoft Research Limited</LegalName>
<Address>21 Station Road, Cambridge, CB1 2FB</Address>
</Organisation>
</ArrayOfOrganisation>
#Paypal #IPN vulnerability – and how to fix it.

The other day, I got a notification of a paypal payment for £0.01, which was odd, but I didn’t realise the significance until a few days later, when I realised that someone had managed to buy 800 euros of credit for only £0.01
The hack was, that the user modified the payment link to change the price, by changing the amount parameter:
https://www.paypal.com/cgi-bin/webscr?…&amount=800
to
https://www.paypal.com/cgi-bin/webscr?…&amount=0.01
But left the “custom” field the same, which typically indicates the basket ID. When the IPN callback was called, it was passed the correct basket ID, but an incorrect mc_gross value. This lead to the user being credited with 800 euros worth, but only paying £0.01
A similar hack could have been done by changing the currency from GBP to JPY.
Simple fix:
In the IPN callback check that the mc_gross and mc_currency matches the expected total in the basket, or include a salted hash of the amount and currency in the custom field
PS: This issue has now been fixed on our website, don’t even bother trying this hack! 🙂
H4sIAAA What’s so important about this string?

This may be a long shot, but if anyone ever searches for this string, I know exactly what you are looking at – It’s a base64 encoded zipped string.
Want to see what it actually it, base64 decode the sting, and unzip the result, here’s the code you need in c#
public static void CopyTo(Stream src, Stream dest)
{
byte[] bytes = new byte[4096];int cnt;
while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
{
dest.Write(bytes, 0, cnt);
}
}public static byte[] Zip(string str)
{
var bytes = Encoding.UTF8.GetBytes(str);using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(mso, CompressionMode.Compress))
{
//msi.CopyTo(gs);
CopyTo(msi, gs);
}return mso.ToArray();
}
}public static string Unzip(byte[] bytes)
{
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(msi, CompressionMode.Decompress))
{
//gs.CopyTo(mso);
CopyTo(gs, mso);
}return Encoding.UTF8.GetString(mso.ToArray());
}
}
#Parse #JSON in MS #SQL server @procurios

If your application stores data in SQL server as a JSON value, you will find it difficult to read out individual properties on this data. This means that you can’t do joins on fields that are held within the data, or any aggregate queries. It’s just not flexible at all.
So, as the name suggests, I’ve used a C# CLR UDF (User defined function) to do this, where it takes in the string, processes it within the CLR and returns it to SQL server.
To give you a few “anti-patterns” of things that don’t work. You may find that SQL server only supports a limited set of .NET assemblies, so you can’t import Newtonsoft to handle the JSON, nor can you use System.Runtime.Serialization, which is not allowed by SQL server either. So I had to use a home grown JSON parser, by Procurios (http://techblog.procurios.nl/k/news/view/14605/14863/how-do-i-write-my-own-parser-(for-json).html) – thanks @procurios
So, creating a new CLR Project in Visual Studio, I added the procurios JSON class, and this code;
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString CLR_ReadJSON(string json, string property)
{
var o = JSON.JsonDecode(json) as Hashtable;
return o[property].ToString();
}
I compiled the DLL, transferred it to the server, and added a new Assembly, which I’ve called CLR_DataTools (The above code was in a namespace called StoredProcedures)
Then I wrote the following SQL code to define the UDF
CREATE FUNCTION [dbo].[CLR_UdfReadJson]
(
@json [nvarchar](4000),
@property [nvarchar](4000)
)
RETURNS nvarchar(max)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [CLR_DataTools].[StoredProcedures].[CLR_ReadJSON]
GO
And that’s all you need! (Although this took me a few hours to figure out)
As an aside, here’s some code I wrote to handle XPath queries on XML within SQL server, but I am aware that there are better ways to do this;
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString CLR_ReadXML(string xml, string xPath)
{
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xml);
var xn = xdoc.DocumentElement.SelectSingleNode(xPath);
var strXml = xn.InnerXml;
return strXml;
}
and then defined the SQL UDF as follows;
CREATE FUNCTION [dbo].[CLR_UdfReadXML]
(
@xml [nvarchar](4000),
@xPath [nvarchar](4000)
)
RETURNS nvarchar(max)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [CLR_DataTools].[StoredProcedures].[CLR_ReadXML]
GO
Uncaught SoapFault exception: [Sender] SOAP-ERROR: Encoding: Violation of encoding rules

WTF?, why the hell is every PHP developer saying my webservice is returning Uncaught SoapFault exception: [Sender] SOAP-ERROR: Encoding: Violation of encoding rules – and there’s no problem with those using .NET, or parsing the XML response over HTTP GET/POST
Ok, let’s break down the problem.
1. It’s not a problem with PHP,it’s your WSDL, so here’s how to diagnose it.
Take this simple code snippet
$client = new SoapClient(“http://www.regcheck.org.uk/api/reg.asmx?wsdl”);
$params = array (
“RegistrationNumber” => “TNZ6972”,
“username” => “**Your Username**”
);
$response = $client->__soapCall(‘Check’, array($params));
print_r($response);
Now, take a copy of the WSDL, and save it as a text file, so you can edit it easily, i.e.
http://www.regcheck.org.uk/php.wsdl , then using HTML style comments, take out everything you can until you get a minimum working version. – i.e. a call that returns “something“, not all the data, but “something”
<s:complexType name=”Vehicle“>
I had a hunch it was the VehicleData object, since it was the most complex type in the response, so I commented that out – and I now had a minimum working version.
After that, I progressively commented out elements within the VehicleData type, until I got my maximum working version – i.e. as much data as possible without it breaking.
At that point, I hit upon this:
<s:element minOccurs=”0″ maxOccurs=”1″ name=”CarModel”> <s:complexType> <s:simpleContent> <s:extension base=”s:integer“> <s:attribute name=”type” type=”s:NCName” /> </s:extension> </s:simpleContent> </s:complexType> </s:element>
Which was the point at which the webservice stopped returning data, and starting throwing the Uncaught SoapFault exception: [Sender] SOAP-ERROR: Encoding: Violation of encoding rules – and it did look odd, since I new that “CarModel” should be a string, not an integer.
Looking at the underlying C# code, the error was obvious
[System.Xml.Serialization.XmlTextAttribute(DataType=”integer“)]
public string Value {
There is no way that Value could both be a string and an integer, so I changed it to
[System.Xml.Serialization.XmlTextAttribute()]
public string Value {
#Base64 decode using #SQL server #UDF

Base64 is a way to encode data into a limited character set, that can allow binary data to be displayed using print-friendly text. For example, if you wanted to represent an image as text, and store it in a database. It does bloat data, but it’s certainly handy when it comes to passing data around.
SQL server doesn’t have a handy function to convert base64 text back into it’s original form, so I decided to write this UDF below;
CREATE FUNCTION dbo.Base64Decode (@Base64 varchar(max))
RETURNS varchar(max)
WITH SCHEMABINDING AS
BEGIN
DECLARE @TEXT AS varchar(max) ;
SELECT
@TEXT = CAST( CAST( @Base64 as XML ).value(‘.’,’varbinary(max)’) AS varchar(max) );RETURN @TEXT ;
END;
GO
#Stuck #App #Roadside assistance in #Australia @stuck_app

Stuck is a new app for Australian drivers which you can download for iOS or Android via their website here;https://stuck.com.au/
Stuck is an on-demand service which calls local automotive experts to the rescue, saving you an annual insurance-style roadside assistance membership. Here’s how it works:
1. Share your required service and location with local, accredited automotive experts. The nearest available expert will arrive to help as soon as possible.
2. You are given the price upfront, which is usually about half the cost of a normal annual membership. Any extras can be added on if required (such as a new tyre).
3. Once your car problem is resolved, payment happens automatically without paperwork. Finally, you provide feedback to the automotive expert and get going!
From a technical point of view, it uses our Australian Car Registration API http://www.carregistrationapi.com/
#MachineLearning using #Microsoft Azure

Me: Azure , what is 1 + 1 ?
Azure: It’s 1.999999999992212
Me: No it’s not.
Azure: Come on, I’m almost right!
I’ve just been playing with the Azure Machine Learning Studio, to see if it could be accurate enough for practical applications. The most simple example I could think of was a model where it was given 1,000 examples of one number, followed by a second number which was one greater.
1,2
2,3
3,4
You can see the model in the Cortana Intellegence Gallery here
https://gallery.cortanaintelligence.com//Experiment/Plus-one-webservice-1
Interestingly, the result is not perfect as would be expected, but it goes wrong in a way that only a machine would think is close to the correct answer.

#Verify a #BankAccount via an #API

If you process large volumes of payments, then you will need to be able to quickly and cheaply check that the payment you are about to make is going to a valid bank account, or else it will delay payment to your supplier / employee / or affiliate, this API allows you to check each account for 3p / 4¢ – using the same technology as used by Stripe.
verifyBankAccount.com
Getting started
The API endpoint is located at https://verifybankaccount.com/api.asmx
It accepts GET / POST and SOAP requests, and returns either a HTTP 500 error with textual description on error, or JSON embedded in XML in the case of a valid response, similar to as follows:
| <string xmlns=”http://verifybankaccount.com/”>
{ </string> |
Countries supported by this API are as follows;
| Country code | |
| US | USA |
| IE | Ireland |
| GB | United Kingdom |
| AU | Australia |
| CA | Canada |
| DK | Denmark |
| FI | Finland |
| FR | France |
| JP | Japan |
| NO | Norway |
| SG | Singapore |
| ES | Spain |
| SE | Sweden |
| AT | Austria |
| BE | Belgium |
| DE | Germany |
| HK | Hong Kong |
| IT | Italy |
| LU | Luxembourg |
| NL | Netherlands |
| PT | Portugal |
The API also includes an endpoint for programmatically retrieving the remaining credits associated with an API Key, called GetRemainingCredit returning data such as;
| <int xmlns=”http://verifybankaccount.com/”>98</int> |
C# (.NET) implementation
Here is a step by step guide to writing a simple C# client
- Open Visual Studio
- Press File > New > Project
- Select Console Application – Visual C#
- Press OK
- Right Click on the project in Solution Explorer
- Select Add > Service Reference
- Click Advanced
- Click Add Web Reference
- Enter “https://www.verifybankaccount.com/api.asmx?wsdl” into the URL
- Press Add Reference
- Click Tools > NuGet Package Manager > Package Manager Console
- Type “Install-Package Newtonsoft.JSON” into the Package Manager Console window
- Now, enter the following code (Replacing the API KEY)
| static void Main(string[] args)
{ var strAPIKey = “Your API key here“; var bank = new com.verifybankaccount.www.API(); Console.WriteLine(“Enter the 2 letter country code:”); var strCountry = Console.ReadLine(); Console.WriteLine(“Enter the Bank sort code:”); var strSortCode = Console.ReadLine(); Console.WriteLine(“Enter the Bank account number:”); var strAccountNumber = Console.ReadLine(); try { var strJson = bank.VerifyBankAccount(strCountry, strSortCode, strAccountNumber, strAPIKey); var jObject = Newtonsoft.Json.Linq.JObject.Parse(strJson); Console.WriteLine(“This bank is ” + jObject[“bank_name”]); } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); } |
PHP Implementation
The following implementation uses the HTTP GET version of the webservice, you could use $soapclient as an alternative implementation. Please note that you should never pass bank account details over an unsecure connection so this code should be run either on localhost or on a suitably secured HTTPS webserver.
You will have to replace the APIKey below
| <?php
$country = $_GET[“country”]; $sortcode = $_GET[“sortcode”]; $accountNumber = $_GET[“accountNumber”]; $url = “https://www.verifybankaccount.com/api.asmx /VerifyBankAccount?”; $url .= “Country=” . $country; $url .= “&SortCode=” . $sortcode; $url .= “&AccountNumber=” . $accountNumber; $url .= “&ApiKey={{Your API Key}}“; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $xmlData = curl_exec($ch); libxml_use_internal_errors(true); $xml=simplexml_load_string($xmlData); if ($xml) { $json = json_decode($xml); print_r($json->bank_name); } else { print_r($xmlData); } ?> |
Unofficial #Google #PlayStore #API, in #JSON

Unofficial Android App Store API
This API is not affiliated with Google, it reads from a database that contains a copy of the Google Play Store, and may not be completely up to date, but is updated regularly. As such, the API is free to use, but we’d appreciate a thank you.
| Usage – Via HTTP GET request |
The API is requested using the following query string:
http://www.androidappstore.com.cn/playstoreapi/api.aspx?search=angry%20birds
Where “Angry birds” is a sample placeholder.
A sample response in JSON would be as follows;
[
{
“ID”: 85052,
“imageUrl”: “https:\/\/lh6.ggpht.com\/M9q_Zs_CRt2rbA41nTMhrPqiBxhUEUN8Z1f_mn9m89_TiHbIbUF8hjnc_zwevvLsRIJy=w300”,
“Name”: “Angry Birds”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “4040062”,
“AppSize”: “48”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/85052\/PlayStore\/angry-birds”
},
{
“ID”: 85080,
“imageUrl”: “https:\/\/lh3.googleusercontent.com\/0vquFcjLdlClPFZlnq3S-kNSyYWyc4MkYwluIfMPHf92QYL8s9rOfozPiG7RQ-7bfQ3R=w300”,
“Name”: “Angry Birds Go!”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_RACING”,
“Price”: “0”,
“Reviewers”: “2695984”,
“AppSize”: “152”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/85080\/PlayStore\/angry-birds-go”
},
{
“ID”: 85085,
“imageUrl”: “https:\/\/lh5.ggpht.com\/rp_WwrHlSIfiDD2w4P6qZf-WXK2XLAn8MXqxZhdteCHIN0I53Po9pXS8lUjFKANLnA=w300”,
“Name”: “Angry Birds Rio”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “1730826”,
“AppSize”: “48”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/85085\/PlayStore\/angry-birds-rio”
},
{
“ID”: 85196,
“imageUrl”: “https:\/\/lh5.ggpht.com\/CXqjoN_u3sFyV_Z1M7E-4KmyI0tYe5FLHV5KosQC-0s5LsZuhm4omg-5nP6VBpIwilI=w300”,
“Name”: “Angry Birds Space”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “1049597”,
“AppSize”: “48”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/85196\/PlayStore\/angry-birds-space”
},
{
“ID”: 85328,
“imageUrl”: “https:\/\/lh5.ggpht.com\/5lsYulxyO1ENBxp89y_vVLI6FwYX5BStQRCLUHKuFl67vWsFwIkSH2YCez7WFGi-eto=w300”,
“Name”: “Angry Birds Seasons”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “1426544”,
“AppSize”: “44”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/85328\/PlayStore\/angry-birds-seasons”
},
{
“ID”: 85443,
“imageUrl”: “https:\/\/lh6.ggpht.com\/mFp9bta4gxoHiVhJ25Q8RjSJRcu7Yn19yIYGhgHuwDfCyUjhSez7G4nsEC-nscCF9TE=w300”,
“Name”: “Angry Birds Friends”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “477116”,
“AppSize”: “35”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/85443\/PlayStore\/angry-birds-friends”
},
{
“ID”: 85460,
“imageUrl”: “https:\/\/lh6.ggpht.com\/JMKJB1_VXk8rH7Kzz_2BPKprT61oMp_Xp768Xbdm-OWa-PWtdsdq55I0DZPZYbNWjC0=w300”,
“Name”: “Angry Birds Star Wars”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “875156”,
“AppSize”: “46”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/85460\/PlayStore\/angry-birds-star-wars”
},
{
“ID”: 90472,
“imageUrl”: “https:\/\/lh6.ggpht.com\/wQMavK-tiAYOnlK4hXwX2fdDET3xWfQIl3sCOQegMszI5CKlWOgXwEot7vChcKSOIXo=w300”,
“Name”: “Angry Birds Transformers”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “818959”,
“AppSize”: “109”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/90472\/PlayStore\/angry-birds-transformers”
},
{
“ID”: 90495,
“imageUrl”: “https:\/\/lh5.ggpht.com\/kSBf57npbQNutgfzvXL7x6Nl95LAQeUTKkCRVWqquOJ6T4IppoKAlfuUgNI1vk6Bc_4=w300”,
“Name”: “Angry Birds Stella”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “451535”,
“AppSize”: “49”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/90495\/PlayStore\/angry-birds-stella”
},
{
“ID”: 90523,
“imageUrl”: “https:\/\/lh5.ggpht.com\/Ju6Su5337-hEXaKsZO4aZEH1H7M_Izu3FoKBSzoF93CbhICXYcISYruOW4ulGBeEIS4=w300”,
“Name”: “Angry Birds Star Wars II Free”,
“Developer”: “Rovio Entertainment Ltd.”,
“IsTopDeveloper”: “False”,
“Category”: “\/store\/apps\/category\/GAME_ARCADE”,
“Price”: “0”,
“Reviewers”: “898573”,
“AppSize”: “49”,
“source”: “PlayStore”,
“url”: “http:\/\/www.androidappstore.com.cn\/EN\/displayproduct\/90523\/PlayStore\/angry-birds-star-wars-ii-free”
}
]