adobedocs / analytics-1.4-apis Goto Github PK
View Code? Open in Web Editor NEWDocumentation and helpful resources for calling the Analytics 1.4 Apis
License: Apache License 2.0
Documentation and helpful resources for calling the Analytics 1.4 Apis
License: Apache License 2.0
I was able to get segment info and save a new segment but not seeing an endpoint to edit an existing segment. Is that the case?
Discovered while working on #23.
Asking Report.GetElements with the following payload:
{
"reportSuiteID": "my_report_suite_id",
"reportType": "any",
"existingElements": null,
"exisitngMetrics": null
}
yield response like
[
{
"id": "category",
"name": "Product Category",
"correlation": false,
"subrelation": true
},
/* … */
]
I was expecting to find a classification
there, but instead found correlation
and subrelation
.
The API spec states that there should be a classification
in the response as well.
The ReportSuite.GetMarketingChannelRules method returns an array of the rules, however for eVar based rules it fails to return the actual eVar ID in question.
Example Response for a rule referencing eVar72 (id's are just sample numbers):
"ruleset_id": 345,
"channel_id": 1,
"junction": "all",
"channel_value": {
"type": "referring_domain",
"id": "0",
"query_string_parameter": ""
},
"rules": [
{
"rule_id": 123,
"hit_attribute": {
"type": "evar",
"query_string_parameter": ""
},
"operator": "equals",
"matches": [
"12312313"
]
}```
The 3 code files in the section https://github.com/AdobeDocs/analytics-1.4-apis/blob/master/docs/getting-started/c_Create_a_Data_Warehouse_Report_using_the_Partner_API.md#download-code-files-for-this-tutorial are broken. They point to the old microsite.
Despite following the POSTMAN guide to the letter I always get an error back. I have the same issue when using other WSSE authentication libraries with these endpoints
{
"error": "Bad Request",
"error_description": "Invalid created timestamp (''). Values should be in ISO-8601 format",
"error_uri": null
}
I've inspected the header and the created timestamp is the same format as that used by the API Explorer.
I see #7 mentions that processing rules are not supported via the API, but is there a good reason? I could see why one might not want to create processing rules via the API, but why not allow API users to see that they exist?
Hi, is this possible in the current API implementation? I'm trying to get specific evar instances for some dimensions but they do not seem available when I request available metrics. If this is not possible, will it be on the 2.0 API?
Hi, i want to know why lately the reports is taking long time to run.
there are reports for clients that finishes after 1-2 hours and there is reports that finishes after more than 5 hours.
why this is happening? did you have a long time reporting queues couple days ago ?
how much time i need to wait for a report to be created ? (currently i am waiting 5 hours but this seems to be not enough)
The Swagger link in readme/front page is formatted incorrectly, such that the resulting page results in a CORS block.
Fetch errorFailed to fetch https://api.omniture.com/admin/1.4/rest/public.json
Fetch errorPossible cross-origin (CORS) issue? The URL origin (https://api.omniture.com) does not match the page (https://adobe-experience-cloud.github.io). Check the server returns the correct 'Access-Control-Allow-*' headers.
https://marketing.adobe.com/developer sends users here to learn more about Mobile SDKs. Easy solution is to include link to https://github.com/Adobe-Marketing-Cloud/mobile-services/releases in the front page/readme; could also include a link to https://marketing.adobe.com/resources/help/en_US/mobile/ios/ and https://marketing.adobe.com/resources/help/en_US/mobile/android/ just to save folks the trouble.
I wanted to use https://adobedocs.github.io/analytics-1.4-apis/swagger-docs.html# but it keeps failing when I authenticate
What is the correct redirection URI?
I used:
without success. I get this error each time:
ERROR The redirect URI provided is missing or does not match
I created a Legacy OAuth Applications with type implicit
Does it need to be an integration using Adobe I/O ?
To call the GetEndpoint method, a Company is needed as a parameter (https://github.com/AdobeDocs/analytics-1.4-apis/blob/master/docs/admin-api/methods/company/r_GetEndpoint.md).
What endpoint can I call that returns a list of Company names, so our customers can select the correct company name and not have to type it in?
Specifically, would the companyName returned by the 2.0 discovery/me endpoint https://www.adobe.io/apis/experiencecloud/analytics/docs.html#!AdobeDocs/analytics-2.0-apis/master/discovery.md serve this function for the 1.4 API?
We are following the documentation for the methods of SaveEvars, SaveProps and SaveEvents and across all 3 methods we are getting the following error :
{"error":"Bad Request","error_description":"No report suites defined.","error_uri":null}
Example request_body to replicate issue -
"evars": [
{
"id": "3",
"name": "Sample",
"allocation_type": "most_recent_last",
"type": 0,
"enabled": True,
"expiration_type": 0,
"expiration_custom_days": 0,
"merchandising_syntax": 0,
"binding_events": [
""
]
}
],
"rsid_list": ["geo1xxsisagar-dev"]
}
Request Url used https://api.omniture.com/admin/1.4/rest/?method=ReportSuite.SaveEvars
For the reporting api, the ReportDescription documentation doesn't specify if DateFrom
and DateTo
are inclusive(i.e. if data for DateTo
is considered in the report).
Hello,
I want to add several dozen of new product profiles to Adobe Analytics via Permissions.SaveGroup endpoint, but unfortunately it always returns 500 Internal Server Error. I've tried couple of data combinations with no luck. This is example payload:
curl -X POST \
'https://api.omniture.com/admin/1.4/rest/?method=Permissions.SaveGroup' \
-H 'Authorization: Bearer DUMMY_TOKEN' \
-H 'Content-Type: application/json' \
-H 'x-api-key: DUMMY_KEY' \
-d '{
"all_report_suite_access": true,
"category_permissions":[
{
"category": "metrics",
"name": "Metrics",
"access": "all"
},
{
"category": "dimensions",
"name": "Dimensions",
"access": "all"
},
{
"category": "reportsuite_tools",
"name": "Report Suite Tools",
"access": "all"
},
{
"category": "analytics_tools",
"name": "Analytics Tools",
"access": "all"
}
],
"group_name": "Test name",
"group_description": "Test description"
}'
Could you tell me if this endpoint does no longer work? Is there some other endpoint in 2.0 API to add those groups? Or is there an Adobe Experience Platform API with such endpoints?
Best,
Marcin
Discovered while working on #24.
Looking at the documentation of reportDescription the table says:
The interval is an integer between 1-60 that specifies the interval to report. For example, 'minute:3' reports the request date range in 3-minute intervals.
However, looking at the documentation of reportDescriptionDateGranularity I can't find a valid type of „minute”.
The specification only describes the type of „string”.
I would like to create a Data Warehouse report and set an FTP location for it to send the report once the data is processed.
What fields within the API do I need to set to achieve this?
The documentation for the DataWarehouse feature does not mention how to set the option for the FTP location.
According to the documentation https://github.com/AdobeDocs/analytics-1.4-apis, "The 1.4 APIs support JWT and OAuth authentication. You can follow the authentication documentation from the 2.0 Analytics APIs and use the access tokens to call either the 1.4 or 2.0 versions of the APIs."
However, the 1.4 Swagger UI https://adobedocs.github.io/analytics-1.4-apis/swagger-docs.html disagrees. When I click on Authorize, it tells me that the Authorization URL is https://authorize.omniture.com/authorize. This is not the same endpoint as the API v2.0 OAuth, which is https://ims-na1.adobelogin.com/ims/authorize (see documentation https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/OAuth/OAuth.md).
When I use the client_id and client_secret I can successfully use for 2.0 API OAuth in the 1.4 Swagger UI, I get the error: The client id supplied is invalid
Is the Swagger UI updated to use the same OAuth as API 2.0?
Is there an API call to list Companies a user can access or a way of having a user select Company during the 3-legged Oauth2 flow?
Or is there another preferred way to query for a user's desired Company?
Similar issue to AdobeDocs/analytics-2.0-apis#23
We are a third party developer and we want to create reporting solutions for our clients. Currently we are using the outdated WSSE header, but we want to move to OAuth 2 to support SSO accounts.
Do I understand correctly that us, as a third party developer that isn't directly an Adobe Analytics customers, cannot create an OAuth application?
If so what is the recommended approach for third party developers? We can certainly not be expected to ask each of our clients to themselves create an OAuth application?
When using the data insertion API to post data. Is there only support for XML, or other formats as well?
https://api.omniture.com/admin/1.4/rest/?method=ReportSuite.GetEvents will return "visibility": "2" for events that have been set to the visibility of "Builders" in the RS Admin UI. For example:
[
{
"rsid": "ageo1xxpnw.orbital.dev",
"site_title": "Orbital Provisions Dev",
"ecommerce_level": "enabled",
"events": [
{
"id": "event1",
"name": "Registrations",
"description": "",
"type": "counter_no_subrelations",
"default_metric": false,
"participation": "disabled",
"serialization": "always_record",
"polarity": "positive",
"visibility": "2"
},
{
"id": "event2",
"name": "Custom 2",
"description": "",
"type": "counter_no_subrelations",
"default_metric": false,
"participation": "disabled",
"serialization": "always_record",
"polarity": "positive",
"visibility": "hidden"
},
{
"id": "event3",
"name": "Product Views Custom (e3)",
"description": "Instance of the Product View being set. Occurs when the product detail page is viewed.",
"type": "counter",
"default_metric": false,
"participation": "disabled",
"serialization": "always_record",
"polarity": "positive",
"visibility": "everywhere"
},
...
HOWEVER, posting to https://api.omniture.com/admin/1.4/rest/?method=ReportSuite.SaveEvents with "visibility" set to "2" gives a 400 error with
{
"error": "Bad Request",
"error_description": "invalid visibility option for event",
"error_uri": null
}
Hi team,
Starting from 12 Sep we stopped receive report files on FTP via DataWarehouse API. The Report.Queue method return report id and status 200, and checking report status show is everything okay but we didn't gen file to FTP. It's reproducing across multiple report suites within different Adobe organizations. However manual upload to FTP via Experience Cloud UI works fine. Also, I've tried re-send API call from the UI Request Manager but didn't get success. Below you find all the required information about API requests.
What can be an issue? Please advise asap.
My API request which was working fine previously
curl --location --request POST 'https://api.omniture.com/admin/1.4/rest/?method=Report.Queue'
--header 'Content-Type: application/json'
--header 'Authorization: Bearer 'xxxxxxxx'
--data-raw '{
"reportDescription": {
"reportSuiteID": "xchmprovtemplcommerce",
"dateFrom": "2020-08-01",
"dateTo": "2020-09-15",
"dateGranularity": "day",
"metrics": [
{
"id": "pageviews"
}
],
"elements": [
{
"id": "browser"
}
],
"source": "warehouse",
"ftp": {
"host": "xxxxxxxxxxx",
"port": "21",
"directory": "adobe_analytics_test",
"username": "xxxxxxxxx",
"password": "xxxxxxxxxxxxxx",
"filename": "Report_arvato_0915.csv"
}
}
}'
Also, I've attached info about the API request from Datawarhouse -> Manager Request page
Hi,
I am getting an error "Invalid report ID" with status code 400 while fetching report by reportID
I am using Report.Queue
API to create report jobs,
Using Report.Get
to access generated report with ID i.e 1909421176 but unfortunately API through below error
{
"error": "report_id_invalid",
"error_description": "Invalid report ID",
"error_uri": null
}
Can anyone please share your thoughts below
Thank you!
When an error occurs with the data insertion API invalid XML is returned, multiple root nodes.
<?xml version="1.0" encoding="UTF-8"?>
<status>FAILURE</status>
<reason>NO account</reason>
While fixing this would obviously be difficult given it would likely be a breaking change it definitely something that should be noted in the documentation. Furthermore the documentation is wrong and states multiple xml declarations are returned in a single response, that does not match what I'm seeing.
https://github.com/AdobeDocs/analytics-1.4-apis/blob/master/docs/data-insertion-api/reference/r_post_response_codes.md
This invalid XML is making parsing problematic.
Leonidas-from-XIV/node-xml2js#197 (comment)
Hello, I don't seem to find any documentation on the classification rule builder service that AA has. The classifications API doesnt mention the rule builder. Does one exists? I would like to be able to ping an endpoint that lets me know if a specific classification rule set is active or not.
Thanks!
Broken link on Step 2: Get Web Service Access to the Enterprise API
Cannot reach (Not Found 404) the User Management URL: http://microsite.omniture.com/t2/help/en_US/admin/index.html#User%20Management
When viewing Processing Rules for multiple report suites, the rule numbers do not reset to 1 in the subsequent RSIDS
Assuming that two RSIDS both have 10 identical rules, the JSON returned from the below request has rules 1-10 for RSID_1 and rules 2-20 for RSID_2
The rule numbers should rest to 1 for RSID_2
{ "rsid_list":[ "RSID_1", "RSID_2" ] }
Could you please take some time in the next few days to make changes to some terminology in your repos and content as much as is possible:
If you cannot remove the term because the writing for example reflects the UI or the code, please make a note and send me an email to [email protected] so we can bring it that team’s attention. Thanks for your efforts in this matter.
Discovered while working on #23.
With the following payload in Postman for a POST https://api.omniture.com/admin/1.4/rest/?method=Report.Queue:
var myReportSuiteId = "my_report_suite_id";
var payload = {
"reportDescription": {
"reportSuiteID": myReportSuiteId,
"date": "2018-01-01",
"dateGranularity": "minute:5",
"metrics": [
{
"id": "visits"
}
],
"sortBy": "string",
"elements": [
{
"id": "prop1",
"classification": "",
"top": 2,
"startingWith": 0,
"search": {
"type": "and",
"keywords": [
"string"
],
"searches": [
null
]
},
"selected": [
"string"
],
"checkpoints": [
],
"parentID": "string",
"pattern": [
[
"string"
]
],
"everythingElse": true
}
],
"segments": [],
"locale": "en_US",
"currentData": false,
"anomalyDetection": false,
"expedite": false,
"elementDataEncoding": "base64"
}
}
I receive the response:
{
"error": "period_invalid",
"error_description": "invalid dateGranularity",
"error_uri": "https://marketing.adobe.com/developer/documentation/analytics-reporting-1-4/errors"
}
Following https://marketing.adobe.com/developer/documentation/analytics-reporting-1-4/errors yields to a redirect to https://www.adobe.io/ but without any docs. Please fix :-)
Discovered while working on #23.
During development I noticed, that the response of Report.GetQueue sometimes is invalid.
For example, I receive the following response:
[{
"queueTime": "2018-09-21T<my_time_with_offset>",
"user": "<my_user_name>",
"reportID": < my_report_id > ,
"estimate": null,
"status": "running",
"priority": 0,
"reportSuiteID": "<my_report_suite_id>",
"type": "pa"
},
{
/*…*/
}
]
However, according to report_queue_item the estimate should be an integer.
What shall null
mean here? Not scheduled? Why is the status then running
instead of waiting
?
Note that the type
is also not enumerated in the documentation.
We performed a manual request to both https://api.omniture.com/admin/1.4/rest/?method=Report.Validate (used for validating the configuration) and https://api.omniture.com/admin/1.4/rest/?method=Report.Queue (used for creating reports) endpoints, with a request that follows the description on the github page and it results in a 500 Internal Error on your side.
Those are the parameters we sent:
{
"reportDescription":{
"reportSuiteID":"sssamsung4de",
"dateFrom":"noon",
"dateTo":"now",
"source":"realtime",
"metrics":[
{
"id":"carts"
}
],
"elements":[
{
"id":"geocity"
}
],
"currentData":true,
"locale":"en_US",
"dateGranularity":"minute:30"
}
}
Could you please fix or advice a workaround?
Dear Adobe documenters,
during consuming your API I came across a conflict between your API specification and the accompanying documentation.
I am trying to consume Report.Queue endpoint.
The API is documented in r_Queue.md.
My payload is (replace True
with true
, False
with false
and None
with null
if you can't read Python):
report_suite_id = "my_report_suite_id"
payload = {
"reportDescription": {
"reportSuiteID": report_suite_id,
"date": "2018-01-01",
"dateFrom": "2018-01-01",
"dateTo": "2018-01-01",
"dateGranularity": "",
"metrics": [
{
"id": "visits"
}
],
"sortBy": "string",
"elements": [
{
"id": "prop1",
"classification": "",
"top": 2,
"startingWith": 0,
"search": {
"type": "and",
"keywords": [
"string"
],
"searches": [
None
]
},
"selected": [
"string"
],
"checkpoints": [
],
"parentID": "string",
"pattern": [
[
"string"
]
],
"everythingElse": True
}
],
"segments": [],
"locale": "en_US",
"currentData": False,
"anomalyDetection": False,
"expedite": False,
"elementDataEncoding": "base64",
"sortMethod": "string",
"source": "standard",
"ftp": {
"host": "string",
"port": 0,
"directory": "string",
"username": "string",
"password": "string",
"filename": "string"
}
}
}
Calling the API with these payload yields:
{'error_uri': 'https://marketing.adobe.com/developer/en_US/documentation/analytics-reporting-1-4/r-reportdescription-1', 'error_description': 'both date and dateFrom or dateTo cannot be specified', 'error': 'period_invalid'}
However, if I leave away either date
or dateFrom
and dateTo
I receive a ModelValidationError.
Looking closer at the OpenAPI specification by loading it into Swagger's online editor (using the File nav item) leads me to look at line 7453:
reportDescription:
type: object
properties:
reportSuiteID:
type: string
date:
type: string
dateFrom:
type: string
dateTo:
type: string
dateGranularity:
type: string
metrics:
$ref: '#/definitions/reportDescriptionMetricList'
sortBy:
type: string
elements:
$ref: '#/definitions/reportDescriptionElementList'
segments:
$ref: '#/definitions/reportDescriptionSegmentList'
locale:
$ref: '#/definitions/reportDescriptionLocale'
currentData:
type: boolean
anomalyDetection:
type: boolean
expedite:
type: boolean
elementDataEncoding:
$ref: '#/definitions/reportDescriptionElementDataEncoding'
sortMethod:
type: string
source:
$ref: '#/definitions/reportDescriptionSource'
ftp:
$ref: '#/definitions/reportDescriptionFtp'
required:
- reportSuiteID
- date
- dateFrom
- dateTo
- dateGranularity
- metrics
- sortBy
- elements
- segments
- locale
- currentData
- anomalyDetection
- expedite
- elementDataEncoding
- sortMethod
- source
- ftp
That is, date
, dateFrom
and dateTo
are all required parts of the payload.
This conflicts with the documentation in r_Queue.md (linked above)
date/dateFrom/dateTo
If the date parameter(s) are omitted, the current day is used.
I would have expected these parameters to be optional.
The documentation entries for dateGranularity
in reportDescription
, and for the field's data type( https://github.com/AdobeDocs/analytics-1.4-apis/blob/master/docs/reporting-api/data_types/r_reportDescriptionDateGranularity.md,
https://github.com/AdobeDocs/analytics-1.4-apis/blob/master/docs/reporting-api/data_types/r_reportDescription.md) are confusing:
The data type description describes each granularity value as relating to the "current" day/month/hour/week/quarter/year. One could conclude from this description that using dateGranularity
ignores dateFrom
and dateTo
in favor of the current date.
Thanks!
Where is ViewProcessingRules in Admin? Please verify that ALL supported methods in 1.4 are correctly documented here.
If you would like me to fill out the descriptions for these empty fields on the Metrics and Dimensions page, please provide the info and I can put them in, if needed:
mobileAudioSupport | |
---|---|
mobileColorDepth | |
mobileCookieSupport | |
mobileDeviceName | |
mobileDeviceType | |
mobileManufacturer | |
mobileScreenHeight | |
mobileScreenWidth | |
mobileVideoSupport | |
monitorColorDepth | |
monitorHeight | |
monitorWidth |
Dear Adobe docs team,
yesterday I was looking at Report.Retry() and was wondered what the response may mean.
Naturally I was looking at Reporting API methods but couldn't find it there.
However, it is documented in the specification.
Doc below should point out that the s.c_r() method will only work on a first-party cookie.
Dear Adobe team,
today I wanted to learn more about usage of your API, so I got an access token and started consuming your OAS.
Sadly, I quickly hit a roadblock, which prevents further investigation.
See https://gist.github.com/Ryuno-Ki/670c744356e26e607277abbe4f3c9676 to learn more about where I got stuck.
Can you reproduce it?
While looking for reporting it, I discovered v2.0 of the API. However it is unclear to me how to decide, which version my company is using. Looking at current internal documentation it seem to be v1.4. If you would need more information regarding it, I'd prefer using email for providing it. Please point me to how I could contact you in this case.
The description for this method is "Creates a new Generic Data Source." However it doesn't seem that is possible. It appears I have to use an already existing data source, pass the id of that data source to this method, then I can update the data source name, dimensions and events. If I omit the data source id, pass a null value or pass an id of a data source that doesn't exist I get a 400 error.
Is there anyway I can actually use this method to create a new data source?
I was looking to do bulk date ranges via the api. Is it not available?
Looking at your PULL_REQUEST_TEMPLATE.md some questions come to my mind:
How Has This Been Tested?
Um, it's documentation. What is to be tested here? What format do you expect? Payload from postman?
Screenshots (if appropriate)
When would that be appropriate? We are basically talking about requests and responses here. I am struggling understanding, how a screenshot should help here.
Bug fix (non-breaking change which fixes an issue)
New feature (non-breaking change which adds functionality)
Breaking change (fix or feature that would cause existing functionality to change)
What kind of functionality does a documentation have? :-)
Was that copy-pasted from other Adobe projects?
My code follows the code style of this project.
Where can I find the style guide?
My change requires a change to the documentation.
I have updated the documentation accordingly.
My change would be an update to the documentation. Or am I missing here something?
I have added tests to cover my changes.
All new and existing tests passed.
See above.
When using Report.Queue
to request a warehouse source report, the corresponding Report.Get
response only includes part of the data.
For example, when requesting from 10/28 to 11/25, only data to 11/6 appears.
The response from Report.Get indicates a longer period ( "period": "2018-10-28T00:00:00-0700/2018-11-25T00:00:00-0800"
).
Also included in the response is:
"page": 1,
"totalPages": 3
This leads me to believe the rest of the data is in pages 2 and 3 can be called via a similar method, but I can't find the relevant documentation.
What's the recommended way of doing this?
Hey, the documentation isn't super clear on what the format of the populate import call should look like. And example like the following would help clear up confusion:
{ "job_id":"325425431", "page":"1", "rows":[ { "row":[ "FB1234", "4.5" , "6.7"] }, { "row":[ "FB1235", "3.2" , "4.6"] } ] }
Is there is a way to know with metrics & elements are supported for a specific report type? API request or something like this?
According to this link:
https://github.com/Adobe-Experience-Cloud/analytics-1.4-apis/blob/master/docs/reporting-api/data_types/r_reportElement.md
The ReportElement has a classification parameter. But upon using postman, Im seeing that the api returns this object instead:
{ "id": "accountsummary", "name": "Report Suite Totals", "correlation": true, "subrelation": false }
What are these correlation and subrelation paramters?
I had heard that WSSE authentication would sunset in November 2020. Do you have a sunset date? We want to be sure to migrate our customers off of the old system in time.
Right now I am comparing some numbers and ran into an effect I can't explain myself.
I try to strip this report from confidential bits, so I am sorry if I can't provide too much details.
This is the request I make, to get the breakdown for an „overtime” report which involves a Calculated Metric:
{
"reportDescription": {
"reportSuiteID": "my_report_suite_id",
"dateFrom": "2018-10-01",
"dateTo": "2018-10-31",
"dateGranularity": "day",
"metrics": [
{
"id": "cm1234_somehash"
}
],
"elements": null,
"segments": [],
"locale": "en_US",
"currentData": false,
"anomalyDetection": false,
"expedite": false,
"elementDataEncoding": "base64"
}
}
Now, when I make a second request, but without "dateGranularity": "day"
the response contains the totals of that month.
However, the sum is different from the totals of a month.
Since I can't reproduce it with „normal” metrics, I suspect the Calculated Metric is too blame here (I likely can't share its definition with you).
My expectation would be that Adobe Analytics would be able to sum up numbers, so the totals would match it.
Is my issue understandable? If not, what further information do you need?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.