En bref : utilisez les URI pour créer vos rapports agrégés AppsFlyer dans des fichiers CSV.
Vous recherchez les données brutes d'API Pull ?
Caractéristiques des données brutes d'API Pull
- Les rapports sont envoyés sous forme de fichiers CSV.
- Les taux d'actualisation des données sont les mêmes que ceux du rapport équivalent des pages Données d'exportation et Tableau de bord général. La mise à jour du coût peut nécessiter un délai de plusieurs heures, en fonction du partenaire qui fournit les données de coût.
- Filtrer par options disponibles : source média et plage de dates.
- Les capacités supplémentaires de l'API Pull sont les suivantes :
- Possibilité de filtrer par type de touch d'attribution
- Fuseau horaire sélectionnable
- L'API Pull peut être utilisée par les membres d'équipe et les développeurs BI ;
- Les utilisateurs de compte obtiennent les rapports en collant les URI dans leur navigateur. Les templates d'URI sont disponibles dans le tableau de bord. Rendez-vous dans Intégration > Accès API.
- Les développeurs BI obtiennent des rapports en incorporant les URI dans les scripts.
Catégorie | UA | Retargeting* | Protect360 |
---|---|---|---|
Partenaires (source média) | ✓ | ✓ | ✓ |
Partenaires par date |
✓ | ✓ | ✓ |
Quotidien |
✓ | ✓ | ✓ |
Géo |
✓ | ✓ | ✓ |
Géo par date |
✓ | ✓ | ✓ |
* Pour les rapports de retargeting, ajoutez |
Lectures connexes :
- Descriptions et exemples de rapports agrégés
- Sélection du bon outil de livraison de données pour les données agrégées
Terminologie
Termes | Description |
---|---|
API pull |
Solution de téléchargement de rapports CSV à l'aide d'URI. |
Appel API ou appel |
Envoi de l'URI à AppsFlyer en le collant dans la barre d'adresse du navigateur ou en utilisant des scripts. |
URI |
|
Guide pour les utilisateurs du compte
À propos des modèles d'URI
- Les modèles d'URI disponibles dans le tableau de bord sont remplis avec l'ID d'app et le type de rapport.
- Des espaces sont réservés au jeton API V1.0 et aux dates de début et de fin, vous devez les modifier.
- La partie de l'URI à droite du point d'interrogation (?) contient des paramètres. Chaque paramètre commence par une esperluette (&). Les paramètres sont utilisés pour régler des filtres, spécifier les champs supplémentaires à inclure, la devise et le fuseau horaire. Par exemple, dans les rapports agrégés pour limiter (filtrer) une source média donnée, utilisez le paramètre media_source :
& media_source=facebook
- Pour mieux comprendre l'API Pull, suivez le didacticiel qui suit.
Obtenez votre premier didacticiel de rapport sur l'API Pull
Avant de commencer :- Demandez à l'admin de vous fournir le jeton V1.0.
Pour télécharger un rapport depuis le tableau de bord :
-
Allez dans Intégration > Accès API.
La page Accès API s'ouvre. - Sélectionnez un type de rapport. Par exemple, Rapport de performance > Rapport quotidien des partenaires.
Le modèle d'URI s'affiche. - Copiez l'URI en cliquant dessus.
- Ouvrez un nouvel onglet dans votre navigateur, collez l'URI.
- Modifiez l'URI :
- Remplacez le champ réservé au jeton par le jeton d'API Pull que vous a transmis l'admin.
Exemple : Remplacez le champ réservé au jeton ainsi&api_token=12345678-1234-1234-1234-123456789012
Attention ! N'ajoutez ni espace ni ponctuation. - Remplacer les champs from/to par des dates.
Exemple :&from=2020-01-20&to=2020-01-31
Attention ! N'ajoutez aucun espace. Ne supprimez pas le &.
- Remplacez le champ réservé au jeton par le jeton d'API Pull que vous a transmis l'admin.
- Cliquez sur <Enter> pour envoyer l'appel API.
Le rapport est téléchargé.
Des paramètres supplémentaires peuvent être définis pour personnaliser les rapports, par exemple : sélection d'une source média donnée, renvoie des données de retargeting, etc. La section qui suit contient la liste des paramètres disponibles.
Paramètres d'API Pull de données agrégées
URI et paramètres du rapport agrégé
Paramètre | Description |
---|---|
api_token | Jeton d'API V1.0. Dans les exemples d'appels, il est indiqué comme suit : <API TOKEN HERE>. |
from |
|
to |
Date de fin. Comme pour from
|
Paramètre | Description |
---|---|
media_source |
À utiliser pour limiter (filtrer) à une source média donnée.
|
attribution_touch_type |
Réglez ce paramètre comme indiqué dans l'exemple pour obtenir les KPI d'attribution post vue. Exemple : |
devise |
Devise des revenus et des coûts Les rapports d'API Pull agrégés utilisent toujours la devise spécifique à l'app. |
reattr |
Obtenir les données de conversion de retargeting.
|
Fuseau horaire |
[Default] Les données sont renvoyées en utilisant le fuseau horaire UTC.
Remarques sur la sélection des fuseaux horaires
|
Rapport Google Adwords filtré
https://hq.appsflyer.com/export/com.greatapp/partners_report/v5?api_token=xxxx
&from=2018-04-09&to=2018-05-09&media_source=googleadwords_int
Rapport Facebook filtré
https://hq.appsflyer.com/export/com.greatapp/partners_report/v5?api_token=xxxx
&from=2018-04-09&to=2018-05-09&media_source=facebook
Paramètre | Description |
---|---|
URI |
|
PID |
Pour filtrer le rapport par une source média spécifique, utilisez le paramètre |
Fuseau horaire |
Sélectionne le fuseau horaire utilisé pour renvoyer les données. Si le paramètre timezonen'est pas envoyé, les données sont renvoyées en utilisant le fuseau horaire UTC. Templates incluant le paramètre timezone. Exemple : |
Indicateurs de performance clés |
Les paramètres Protect360 sont les mêmes dans l'API Pull et l'API principale.
|
KPI d'attribution post vue
- Pour obtenir les KPI d'attribution post vue, ajoutez le paramètre attribution_touch_type=impression à l'URI du rapport agrégé de l'API Pull, comme indiqué dans l'exemple.
- Vous pouvez utiliser le paramètre avec n'importe lequel des rapports agrégés disponibles. Copiez simplement l'URI depuis l'interface utilisateur et ajoutez-y le paramètre.
- Vous pouvez également ajouter le paramètre &media_source pour limiter le rapport à une source média spécifique, comme illustré dans l'exemple qui suit.
- Certains KPI d'attribution post vue, comme les clics, les impressions et les API de coût n'ont pas de valeurs associées et affichent la valeur N/A à la place.
Exemple | Exemple d'URI |
---|---|
Attribution post vue uniquement | https://hq.appsflyer.com/export/{app_id}/partners_report/v5?api_token={API token}&from=yyyy-mm-dd&to=yyyy-mm-dd&attribution_touch_type=impression |
Attribution post vue et source media |
https://hq.appsflyer.com/export/{app_id}/partners_report/v5?api_token={API token}&from=yyyy-mm-dd&to=yyyy-mm-dd&attribution_touch_type=impression&media_source=example_ad_network |
API Pull pour les développeurs
Principes de mise en œuvre
Conditions préalables :
Parcourez le guide de l'API Pull à l'usage des utilisateurs du compte.
À prendre en compte :
- Il existe un template d'URI dans le tableau de bord pour chaque type de rapport disponible. Allez dans Intégration > Accès API.
- Vous pouvez modifier le template pour obtenir les données dont vous avez besoin, par exemple en définissant des périodes ou en filtrant par paramètres.
- Les paramètres des rapports de données brutes et de données agrégées diffèrent et sont détaillés dans les sections consacrées aux rapports.
Chemin |
|
Paramètres de chemin |
|
Méthode HTTP |
|
Paramètre | Description |
---|---|
Exemple d'URI |
|
api_token |
|
Autres paramètres |
Les paramètres diffèrent selon |
Exemple
L'exemple d'appel URI comprend des paramètres supplémentaires :
https://hq.appsflyer.com/export/example.app.com/installs_report/v5?
api_token={Account owner API key should be used}&from=yyyy-mm-dd
&to=yyyy-mm-dd&additional_fields=keyword_id,store_reinstall,
deeplink_url,oaid,install_app_store,contributor1_match_type,
contributor2_match_type,contributor3_match_type,match_type
Exemples de scripts
Intégrez l'API Pull dans des scripts pour récupérer des données.
- Au besoin, modifiez les scripts en termes de type de rapport, de plage de dates et de filtres.
- Ces exemples utilisent le rapport install.
import okhttp3.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.concurrent.TimeUnit;
public class PullApi {
public static void main(String[] args){
String appID = "<APP_ID>";
String reportType = "<REPORT_TYPE>";
String apiToken = "<API_TOKEN>";
String from = "<FROM_DATE>";
String to = "<TO_DATE>";
String requestUrl = "https://hq.appsflyer.com/export/" + appID + "/" + reportType + "/v5?api_token=" + apiToken + "&from=" + from + "&to=" + to;
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
Request request = new Request.Builder()
.url(requestUrl)
.addHeader("Accept", "text/csv")
.build();
try {
Response response = client.newCall(request).execute();
if(response.code() != 200) {
if(response.code() == 404) {
System.out.println("There is a problem with the request URL. Please make sure it is correct");
}
else {
assert response.body() != null;
System.out.println("There was a problem retrieving the data: " + response.body().string());
}
} else {
assert response.body() != null;
String data = response.body().string();
BufferedWriter writer;
writer = new BufferedWriter(new FileWriter(appID + "-" + reportType + "-" + from + "-to-" + to + ".csv"));
writer.write("");
writer.write(data);
writer.close();
}
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
request = require('request');
const fs = require('fs');
const appID = '<APP_ID>';
const reportType = '<REPORT_TYPE>';
const apiToken = '<API_TOKEN>';
const from = '<FROM_DATA>';
const to = '<T0_DATE>';
const requestUrl = `https://hq.appsflyer.com/export/${appID}/${reportType}/v5?api_token=${apiToken}&from=${from}&to=${to}`;
request(requestUrl, (error, response, body) => {
if (error) {
console.log('There was a problem retrieving data:', error);
}
else if (response.statusCode != 200) {
if (response.statusCode === 404) {
console.log('There is a problem with the request URL. Make sure that it is correct');
} else {
console.log('There was a problem retrieving data:', response.body);
}
} else {
fs.writeFile(`${appID}-${reportType}-${from}-to-${to}.csv`, response.body, (err) => {
if (err) {
console.log('There was a problem writing to file: ', err);
} else {
console.log('File was saved');
}
});
}
});
import requests
app_id = '<APP_ID>'
report_type = '<REPORT_TYPE>'
params = {
'api_token': '<API_TOKEN>',
'from': 'FROM_DATE',
'to': 'TO_DATE'
}
request_url = 'https://hq.appsflyer.com/export/{}/{}/v5'.format(app_id, report_type)
res = requests.request('GET', request_url, params=params)
if res.status_code != 200:
if res.status_code == 404:
print('There is a problem with the request URL. Make sure that it is correct')
else:
print('There was a problem retrieving data: ', res.text)
else:
f = open('{}-{}-{}-to-{}.csv'.format(app_id, report_type, params['from'], params['to']), 'w', newline='', encoding="utf-8")
f.write(res.text)
f.close()
using System;
using RestSharp;
using System.Text;
using System.Net;
using System.IO;
namespace Pull_API
{
class PullAPi
{
static void Main(string[] args)
{
var appID = "<APP_ID>";
var reportType = "<REPORT_TYPE>";
var apiToken = "<API_TOKEN>";
var from = "<FROM_DATE>";
var to = "<TO_DATE>";
var requestUrl = "https://hq.appsflyer.com/export/" + appID + "/" + reportType + "/v5?api_token=" + apiToken + "&from=" + from + "&to=" + to;
var client = new RestClient(requestUrl);
var request = new RestRequest(Method.GET);
request.AddHeader("Accept", "text/csv; charset=UTF-8");
IRestResponse response = client.Execute(request);
HttpStatusCode statusCode = response.StatusCode;
int numericStatusCode = (int)statusCode;
if(numericStatusCode != 200){
if(numericStatusCode == 404){
Console.WriteLine("There is a problem with the request URL. Make sure that it is correct.");
} else {
Console.WriteLine("There was a problem retrieving data: " + response.Content);
}
} else {
System.IO.File.WriteAllText(@"" + appID + "-" + reportType + "-" + from + "-to-" + to + ".csv", response.Content);
Console.WriteLine("Data retrieved succesfully");
}
}
}
}
<?
$appID = '<APP_ID>';
$reportType = '<REPORT_TYPE>';
$apiToken = '<API_TOKEN>';
$from = '<FROM_DATE>';
$to = '<TO_DATE>';
$query = http_build_query([
'api_token' => $apiToken,
'from' => $from,
'to' => $to
]);
$requestUrl = 'https://hq.appsflyer.com/export/' . $appID . '/' . $reportType . '/v5?'.$query;
$report = $appID . '-' . $report . '-' . $from . '-to-' . $to;
$curl = curl_init($requestUrl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_ENCODING, "");
curl_setopt($curl, CURLOPT_NOSIGNAL, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 100);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"cache-control: no-cache",
"Accept: text/csv; charset=UTF-8"
));
$response = curl_exec($curl);
$info = curl_getinfo($curl);
$err = curl_error($curl);
curl_close($curl);
var_dump($response);
if ($err) {
echo $info['http_code'];
echo "cURL Error #: " . $err . '. ';
if ($info['http_code'] == 404) {
echo 'There is a problem with the request URL. Make sure that it is correct';
}
if ($info['http_code'] == 401) {
echo 'There was a problem retrieving data: authentication failed.';
}
echo PHP_EOL;
} else {
$fp = fopen($report, 'w+');
fwrite($fp, $response);
fclose($fp);
echo $response;
}
?>
Informations supplémentaires
Particularités et limites
Particularité | Commentaires |
---|---|
Type de jeton API requis |
![]() |
Accès du réseau publicitaire | N |
Autorisations de l'agence | Y |
Transparence de l'agence | Y |
Devise spécifique à l'app | Y |
Fuseau horaire spécifique à l'app | Y |
Coût | Les données de coût concernent uniquement les campagnes UA, elles ne s'appliquent pas aux campagnes de retargeting ou aux campagnes inactives (qui n'ont pas d'installations). |
Actualisation des données | En continu |
Données historiques | Y |
Données non organiques | Y |
Données organiques | Y |
Limitations des taux | |
Limitations de taille |
Attention ! Les API Pull ne prennent en charge qu'un million de lignes pour les données brutes. Les rapports de données agrégées sont limités à 200 000 lignes. |
Changements de nom de campagne | Les rapports API Pull ne prennent pas en charge les changements de nom de campagne |
Code d'erreurs API et dépannage
Statut | Code | Problème/message | SOLUTION |
---|---|---|---|
OK | 200 | Fichier CSV vide |
|
OK |
200 |
|
Aucun jeton API trouvé dans l'URI |
Demande incorrecte |
400 |
L'historique des rapports bruts est limitée à 90 jours |
Utilisez |
Demande incorrecte |
400 |
Vous avez atteint le maximum d'appels API pour ce type de rapport |
- |
Non autorisé |
401 |
Le jeton d'API fourni est invalide |
Demandez à un admin de vous fournir le jeton en cours. |
Non autorisé |
401 |
Le compte peut être suspendu |
Connectez-vous au tableau de bord et vérifiez l'état du compte. |
Pas de résultat |
404 |
La page d'erreur 404 d'AppsFlyer s'affiche |
|